1.MySQL中的数据排序是怎么实现的?
回答重点
排序过程中,如果排序字段命中索引,则利用 索引排序。
反之,使用文件排序。
文件排序中,如果数据量少则在内存中排序, 具体是使用单路排序或者双路排序。 如果数据大则利用磁盘文件进行外部排序,一 般使用归并排序。
知识扩展理解
根据 explain 的结果来看,MySQL 可以分为 索引排序和 filesort。
索引排序
如果查询中的 ORDER BY 子句包含的字段已经 在索引中,并且索引的排列顺序和 ORDER BY 子句一致,则可直接利用索引进行排序。这种 方式效率最高,因为索引有序。
filesort
当使用 explain 分析 SQL 发现执行计划的 extra 中包含 using filesort 的时候,说明 它无法应用索引的顺序,而主动排序了。 如果需要排序的数据比较少,则直接在内存中 通过 sort_buffer 就能排了。具体是通过 sort_buffer_size 参数来控制 sort_buffer 的大小,如果需要排序的数据量小于 sort_buffer 则直接在内存中排序,反之需要 利用磁盘临时文件排序,性能就比较差了。
内存排序
在 sort