排序(order by)
MySQL支持两种方式的排序filesort和index,Using index是指MySQL扫描索引本身完成排序。index效率高,filesort效率低,我们这个排序针对于filesort
filesort:不会按照索引来排序,他会根据条件去扫描整个表,然后加载到内存进行排序
单路排序:
将查询到的满足条件的整个表数据加载到内存中统一去排序,排完序之后就可以返回结果集了
双路排序:
将查询到的满足条件的整个表数据的主键和要排序的字段加载到内存中,然后在内存中只针对这几个字段排序好,再根据排好序的主 键去聚集索引页执行回表操作,然后在返回结果集
优缺点
单路排序:单路排序占用的内存大,但是排完序之后结果集就可以直接返回了
双路排序:双路排序占用的内存小,但是排完序之后还要进行一次回表的操作
怎么设置排序规则?
MySQL 通过比较系统变量 max_length_for_sort_data(默认1024字节) 的大小和需要查询的字段总大小来判断使用哪种排序模式。
如果 表字段的总长度小于max_length_for_sort_data ,那么使用 单路排序模式;
如果 表字段的总长度大于max_length_for_sort_data ,那么使用 双路排序模∙式。