Оптимизировать SQL-запрос, когда выражения GROUP BY и ORDER BY различаются? - PullRequest
1 голос
/ 01 сентября 2010

Из документации "Заказ по оптимизации в MySQL" я цитирую ...

В некоторых случаях MySQL не может использовать индексы для разрешения ORDER BY, хотя он все еще использует индексы для поиска строки, которые соответствуют предложению WHERE. Эти случаи включают в себя следующее:

  • У вас разные выражения ORDER BY и GROUP BY.

Есть ли обходной путь для этого?

Мой запрос ...

SELECT *
FROM (`product`)
WHERE `Category1` = 'PC'
AND `Category2` = 'desktop'
GROUP BY `product_code`
ORDER BY `reviews` desc, `popularity` desc
LIMIT 10

Объяснить вывод ...

select_type: SIMPLE
table: product
type: ref
possible_keys: Category1_idx
key: Category1_idx
key_len: 390
ref: const, const
rows: 508
Extra: Using where; Using temporary

Привет

1 Ответ

1 голос
/ 01 сентября 2010

GROUP BY обычно используется с такими функциями, как SUM () для агрегирования записей.Ваш запрос, по-видимому, не требует предложения group by.Будет ли лучше работать следующее?

ВЫБРАТЬ * ИЗ (product) ГДЕ Category1 = 'ПК' И Category2 = "рабочий стол" ЗАКАЗАТЬ ПО product_code, reviews desc, popularitydesc LIMIT 10

Вы, конечно, создадите индекс для соответствия.

http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html

...