概述:
- 排序也可以走索引。
- 覆盖索引的情况下,如果走到了排序字段,那后面的索引字段就没法用了,只能回表取完整数据再筛了。
排序有两种情况:
- 走了索引,就不需要排序了,因为顺序已经对了。
- 没走索引,就需要额外排序了
- 根据执行计划的Extra字段是否包括Use fileSort来判断是否进行了额外排序。
- 文件排序也有两种方式
文件排序方式:
mysql权衡两种排序方式会根据,数据量、回表消耗等进行计算,
- 两种方式没有孰优孰劣
- 单路排序
- 是一次性取出满足条件行的所有字段,然后在sort buffer中进行排序;用trace工具可以看到sort_mode信息里显示
< sort_key, additional_fields >或者< sort_key, packed_additional_fields >
- 是一次性取出满足条件行的所有字段,然后在sort buffer中进行排序;用trace工具可以看到sort_mode信息里显示
- 双路排序
- 是首先根据相应的条件取出相应的排序字段和可以直接定位行数据的行 ID,然后在 sort buffer 中进行排序,排序完后需要再次取回其它需要的字段;用trace工具可以看到sort_mode信息里显示
< sort_key, rowid >
- 是首先根据相应的条件取出相应的排序字段和可以直接定位行数据的行 ID,然后在 sort buffer 中进行排序,排序完后需要再次取回其它需要的字段;用trace工具可以看到sort_mode信息里显示
