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