ORDER BY的底层算法
全字段排序
- 将所有符合条件的记录加载到sort_buffer中
- 在内存中,但是如果sort_buffer_size设置太小,容纳不下所有的记录,则会加载到tmp_file中,每个tmp_file大小为sort_buffer_size
- 进行归并排序
- 随即将sort_buffer中排序完的数据返回给客户端
rowid排序
- 这种排序算法和全字段排序最大的区别就是
- 优点:放入sort_buffer中的只有排序字段和主键,能更大程度避免磁盘排序
- 缺点:需要再次回表查询完整记录,增加了IO开销
索引排序
- 对排序字段创建联合索引,这样子就避免了字段排序,而只需要额外做一次回表操作即可
索引覆盖
- 相对于索引排序来说,将查询字段全部放在联合索引中,避免了额外的回表操作