2016-11-19 70 views

回答

1

是该指数指数(A,B),在同时使用您的地点和

在您的订单

看到这个http://dev.mysql.com/doc/refman/5.7/en/order-by-optimization.html

该指数还可以即使ORDER BY不使用只要索引的所有未使用部分和所有额外的ORDER BY列都是WHERE子句中的常量,就可以精确匹配 索引。该 下列查询使用索引来解决ORDER BY部分:

SELECT * FROM t1 
    ORDER BY key_part1,key_part2,... ; 
0

在此查询:

SELECT (..) 
FROM db 
WHERE A = const. AND B = const. AND C = const. 
ORDER BY A DESC 
LIMIT const. 

ORDER BY是多余的 - 你已经明确表示,A是一个常数。您应该从查询中完全删除ORDER BY

这不是在documentation一个明显的例子,所以我不知道如果MySQL是足够聪明的使用索引在这种情况下。 MySQL不一定会优化具有不必要的查询ORDER BY,所以你最好的选择是检查执行计划。

要清楚,下面应该使用的ORDER BY指数:

WHERE A = const. 
ORDER BY B 
LIMIT const. 

或者:

WHERE A = const. AND B = const. 
ORDER BY C 
LIMIT const. 

编辑:

(就是我为什么如上回答哪一个)

如果您的情况是a > const与其他条件,那么我不认为会使用索引。您可能做:

SELECT * 
FROM (SELECT (..) 
     FROM db 
     WHERE A > const. 
     ORDER BY A DESC 
    ) a 
WHERE B = const. AND C > const. 
LIMIT const. 

应该使用索引的子查询。然后过滤发生(不使用索引,但你仍然需要select . . .的数据页。

注意:我不喜欢这个解决方案。在SQL中,通常不应该假设子查询处于特殊的顺序,但它在MySQL中工作,基本上记录为工作,因为MySQL实现子查询

+0

感谢您的提示,我实际上有条件A> const。 –

相关问题