ORDER BY的底层算法

全字段排序

  • 将所有符合条件的记录加载到sort_buffer中
    • 在内存中,但是如果sort_buffer_size设置太小,容纳不下所有的记录,则会加载到tmp_file中,每个tmp_file大小为sort_buffer_size
  • 进行归并排序
  • 随即将sort_buffer中排序完的数据返回给客户端

rowid排序

  • 这种排序算法和全字段排序最大的区别就是
    • 优点:放入sort_buffer中的只有排序字段和主键,能更大程度避免磁盘排序
    • 缺点:需要再次回表查询完整记录,增加了IO开销

索引排序

  • 对排序字段创建联合索引,这样子就避免了字段排序,而只需要额外做一次回表操作即可

索引覆盖

  • 相对于索引排序来说,将查询字段全部放在联合索引中,避免了额外的回表操作