一条SQL到底能不能走索引排序?
实际遇到的场景比较多,总结记录到下表,后面不断补充。
一些结论
1、in查询排序:与范围查询的区别在于,in后面的等值查询依然可以走索引,范围查询不可以。排序行为与范围查询一致。 2、in查询排序:in后面的列都不能用索引排序,但是如果in列参加排序,后面可以用索引排序,与范围查询行为一致。 3、范围查询后面的列不能走索引,也无法排序。 3、范围查询排序:范围查询列自己排序了,后面跟着的列可以走索引排序,可以串联到主键也可以索引排序,但是中间不能断。
实际验证
CREATE TABLE `sbtest1` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`k` int(11) NOT NULL DEFAULT '0',
`c` char(120) NOT NULL DEFAULT '',
`pad` char(60) NOT NULL DEFAULT '',
`i` int(11) NOT NULL DEFAULT '0',
`v` varchar(32) NOT NULL DEFAULT '',
`ct` datetime NOT NULL DEFAULT '1970-01-02 00:00:00',
PRIMARY KEY (`id`),
KEY `k_1` (`k`)
) ENGINE=InnoDB AUTO_INCREMENT=10000001 DEFAULT CHARSET=utf8mb4
场景验证,请对号入座