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

问题描述:

从MySQL文档中的排序优化,我引用...当GROUP BY和ORDER BY表达式不同时优化SQL查询?

在某些情况下,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 

Explain输出...

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 

问候

GROUP BY通常与像SUM函数(),以总记录中使用。您的查询似乎不需要group by子句。以下工作会更好吗?

SELECT * FROM(product) WHERE Category1 = 'PC' 和Category2 = '桌面' ORDER BY product_codereviews递减,popularity递减 LIMIT 10

您可以创建一个索引来匹配课程。

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

+0

我需要GROUP BY来缓解一些编程操作。除了删除GROUP BY之外是否还有其他方法 - 可能是一些子查询或其他内容? – vikmalhotra 2010-09-01 10:14:27

+0

您是否检查过现有查询正在返回的记录,如果您没有进行汇总分组,有时结果可能会出现意外。 – Jaydee 2010-09-01 10:50:19