mysql使用order by排序为什么索引失效?

作者: 老左讲技术分类: 计算机技术 发布时间: 2022-11-22 10:21:08 浏览:3607 次

mysql使用order by排序为什么索引失效?

LeingDoes:
这块我觉得是因为只有最左是有序的,剩下的主键和不是左边都是无序的 因此没能走到索引[笑哭]

【回复】回复 @何以饮鸩 :恩,这是因为排序是按从左到右的,比如说比较两个数字的大小, 是按从左到右的,第一位如果比较出大小就不用比较第二位了, 如果第一位相等才进行第二位比较。而排序的先后顺序是通过比较而得来的。
大cc:
我明白了,联合索引前几个字段定下来,才能根据最后字段排序,如果非要写范围查询,那就要改下联合索引,吧createtime改成联合索引的第二个字段

【回复】回复 @大cc :使用的什么存储引擎?如果是innodb,你说的两个问题都不用顾虑的
【回复】回复 @密云榛子IT教育 :老师,实际项目中,经常有根据时间排序的,但是根据时间字段建索引又感觉不合适,有时候一个表的索引的数据大小比本身数据还要大,这个怎么办
【回复】对呀,因为前几个字段确定了,才能确保下一个字段是有序的
带上呆呆:
总结,对于复合索引,要固定左边所有的,右边只剩一个,才能保证索引顺序生效,否则失效

【回复】回复 @小CC121 :如果排序列只有create time,或create time是排序列的第一个,会走索引
【回复】只对只对create time建单独索引 排序会走索引吗?
【回复】不是,是要保证从左边开始连续就行,也就是满足左前缀

程序员 编程 order by 排序 mysql sql 性能优化 调优

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!