У меня проблема с MySQL Query, и я не могу ее оптимизировать.MySQl Query: Join and Group By, slow performance
SELECT
p.id,
p.name,
p.sku,
p.type
FROM
xm_products p
LEFT JOIN xm_store_product sp ON p.id = sp.product_id
LEFT JOIN xm_store s ON sp.store_id = s.id
WHERE
s.id = 1
ORDER BY
p.type,
p.name asc
LIMIT
20 OFFSET 0
Этот запрос очень медленно: Querytime 2.532s
Если удалить Order By пункта, запрос очень быстро: 0.0001s
Поясните показать следующую информацию:
+----+-------------+-------+--------+-------------------------------------------+----------------------+---------+---------------------------------------+--------+----------------------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+--------+-------------------------------------------+----------------------+---------+---------------------------------------+--------+----------------------------------------------+
| 1 | SIMPLE | s | const | PRIMARY | PRIMARY | 4 | const | 1 | Using index; Using temporary; Using filesort |
| 1 | SIMPLE | sp | ref | IDX_CA42254AB092A811,IDX_CA42254A4584665A | IDX_CA42254AB092A811 | 5 | const | 102157 | Using where |
| 1 | SIMPLE | p | eq_ref | PRIMARY | PRIMARY | 4 | model.sp.product_id | 1 | |
+----+-------------+-------+--------+-------------------------------------------+----------------------+---------+---------------------------------------+--------+----------------------------------------------+
3 rows in set
у меня есть 3 таблицы:
- xm_product с первичным ключом ID
- xm_store с первичным ключом ID
- xm_store_product с индексом на store_id и PRODUCT_ID
Я попытался добавить индекс p.name и p.type, а также комбинированный индекс (р .name, p.type), но это не помогло.
Как я могу оптимизировать производительность этого запроса?
EDIT:
Я взял меня 2 часа, чтобы создать sqlfidle. Но здесь есть некоторые данные. http://sqlfiddle.com/#!2/2bf8d/1
Проблема заключается в том, что «Group By» вызывает «Использование индекса, использование временного файла с использованием filesort».
Как я могу исправить свой пример?
EDIT 2:
De xm_products таблица имеет около 200'000 записей. Xm_store_products около 400 000. Запрос предназначен для пейджера, предел до 20% на страницу.
Привет, можете ли вы создать sqlfiddle (sqlfiddle.com) для вашей схемы с образцами? – Damodaran
Вы запустили объяснение с индексами на p.name и p.type? – jah
Сколько записей нужно сортировать? –