当GROUP BY和ORDER BY表达式不同时优化SQL查询?

时间:2010-09-01 09:59:48

标签: sql optimization query-optimization

从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 个答案:

答案 0 :(得分:1)

GROUP BY通常与SUM()等函数一起使用来聚合记录。您的查询似乎不需要group by子句。以下工作会更好吗?

SELECT * FROM(product) 在哪里Category1 ='PC' 和Category2 ='桌面' ORDER BY product_codereviews desc,popularity desc 限制10

您当然会创建一个匹配的索引。

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