聊聊MySQL是如何处理排序的

💡 原文中文,约2100字,阅读约需5分钟。
📝

内容提要

本文介绍了MySQL中排序的处理方式和优化方法,包括使用二级索引保证有序记录和使用sort_buffer进行排序。建议为需要排序的列建立合适的索引,避免使用磁盘页辅助排序。

🎯

关键要点

  • MySQL查询中常用order by和group by进行排序。
  • 排序处理分为两种情况:有序记录和无序记录。
  • 使用二级索引可以保证结果集有序,避免额外排序开销。
  • 优化器可能不使用索引,导致全表扫描。
  • 当使用filesort时,会使用sort_buffer进行排序。
  • sort_buffer用于存放查询需要的字段,可能只存放排序字段和主键。
  • 如果字段长度小于max_length_for_sort_data,所有字段存入sort_buffer。
  • 如果字段长度大于max_length_for_sort_data,只存储排序字段和主键值。
  • 内存足够时在内存中排序,不够时使用磁盘临时文件辅助排序。
  • 排序算法为归并算法,先分割再合并。
  • 建议为需要排序的列建立合适的索引,避免使用磁盘辅助排序。
  • 可以通过optimizer_trace追踪优化器,分析排序过程。
➡️

继续阅读