mysql中联合索引排序的问题

背景

在test数据库中,查询一组数据会根据id进行排序,而同样的条件在pre数据库中查询却没有根据默认的id主键来排序,于是激起了好奇心。

 

情况

正常情况下,在默认没有写order by条件的情况下,查询出来的结果会根据id主键从小到大的排序,例如在测试环境中会有:

mysql中联合索引排序的问题_第1张图片

但是在pre数据库中,则有:

mysql中联合索引排序的问题_第2张图片

分析

到底是什么原因导致了没有根据id来排序呢?第一点想到的一定是与表结构定义有关,左侧是test的表定义,右侧是pre的表定义

mysql中联合索引排序的问题_第3张图片 mysql中联合索引排序的问题_第4张图片

可以看到,两个表的只有索引不一样,在test数据库下,走的是INDEX_PLAN_ID的索引,而在pre数据库下,走的是联合索引idx_teach_plan_question,可能排序就与索引有关

 

验证

test数据库sql解释

mysql中联合索引排序的问题_第5张图片

pre数据库sql解释

mysql中联合索引排序的问题_第6张图片

发现查询条件走的索引和分析的一致。

另外当我们删除掉test数据库中该表的INDEX_PLAN_ID索引后,也会出现id乱序的情况,从另一个方面也验证了根据联合索引的排序。

 

结论

若查询条件中没有走索引,或者是走的普通索引,结果都会按照id主键从小到大排序

若查询条件走联合索引,则结果会按照联合索引的从左到右的字段先后顺序排序。

你可能感兴趣的:(技术学习)