Mysql A是否可以按顺序使用索引(A,B),其中A>;常数和B=常数。及c>;常数
我有以下疑问:Mysql A是否可以按顺序使用索引(A,B),其中A>;常数和B=常数。及c>;常数,mysql,Mysql,我有以下疑问: SELECT (..) FROM db WHERE A > const. AND B = const. AND C > const. ORDER BY A DESC LIMIT const. 我肯定需要一个多列索引(a,B),因为a过滤器不够强大。但是这个索引可以通过一个语句在顺序中使用,还是需要一个(A,B,C)索引?是的,索引(A,B)在where和ORDER BY中都使用 看到这个了吗 即使ORDER BY与 只要索引的所有未使用部分和所有 额外的ORDER
SELECT (..) FROM db WHERE A > const. AND B = const. AND C > const. ORDER BY A DESC LIMIT const.
我肯定需要一个多列索引(a,B),因为a过滤器不够强大。但是这个索引可以通过一个语句在顺序中使用,还是需要一个(A,B,C)索引?是的,索引(A,B)在where和ORDER BY中都使用
看到这个了吗
即使ORDER BY与
只要索引的所有未使用部分和所有
额外的ORDER BY列是WHERE子句中的常量。这个
以下查询使用索引按部分解析订单:
SELECT * FROM t1
ORDER BY key_part1,key_part2,... ;
在此查询中:
SELECT (..)
FROM db
WHERE A = const. AND B = const. AND C = const.
ORDER BY A DESC
LIMIT const.
orderby
是多余的——您已经明确声明A
是一个常量。您应该从查询中完全删除ORDER BY
这在中不是一个明确的例子,所以我不确定MySQL是否足够聪明,可以在这种情况下使用索引。MySQL不一定会优化具有不必要的
ORDER BY的查询,因此最好的选择是检查执行计划
为清楚起见,以下内容应使用排序依据的索引:
WHERE A = const.
ORDER BY B
LIMIT const.
或:
编辑:
(这就是我回答上述问题的原因)
如果您的条件是a>const
以及其他条件,那么我认为不会使用索引。你可以做:
这应该使用子查询的索引。然后进行过滤(不使用索引,但您仍然需要select…
的数据页)
注意:我不喜欢这种解决方案。在SQL中,通常不应假定子查询是按特定顺序进行的。但是,它在MySQL中确实有效,并且基本上被记录为有效,因为MySQL实现了子查询。感谢您的提示,我实际上有条件a>const。我更正了我的帖子。
WHERE A = const. AND B = const.
ORDER BY C
LIMIT const.
SELECT *
FROM (SELECT (..)
FROM db
WHERE A > const.
ORDER BY A DESC
) a
WHERE B = const. AND C > const.
LIMIT const.