聊聊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追踪优化器,分析排序过程。
🏷️
标签
➡️