MySQL数据库ORDER BY优化总结(为排序使用索引)
双路排序:在MySQL4.1之前行使双路排序,就是两次磁盘扫描,获得最终数据。读取行指针和order by列,对他们举办排序,然后扫描已经排好序的列表,凭证列表中的值从头从列表中读取对应的数据输出。即从磁盘读取排序字段,在buffer举办排序,再从磁盘取其他字段。假如行使双路排序,取一批数据要对磁盘举办两次扫描,众所周知,I/O操纵是很耗时的,因此在MySQL4.1往后,呈现了改造的算法:单路排序。 单路排序:从磁盘中查询所需的列,凭证order by列在buffer中对它们举办排序,然后扫描排序后的列表举办输出。它的服从更高一些,停止了第二次读取数据,而且把随机I/O酿成了次序I/O,可是会行使更多的空间,由于它把每一行都生涯在内存中了。但当读取数据高出sort_buffer的容量时,就会导致多次读取数据,并建设姑且表,最后多路归并,发生多次I/O,反而增进其I/O运算。 办理方法: 增进sort_buffer_size参数的配置。 增大max_length_for_sort_data参数的配置。 4. 晋升order by速率 在行使order by时,不要用select *,只查询所需的字段。由于当查询字段过多时,会导致sort_buffer不足,从而行使多路排序或举办多次I/O操纵。 增进sort_buffer_size。 增进max_length_for_sort_data。 5. 优化group by group by与order by很相同,着实质是先排序后分组,遵照索引建设次序的最佳左前缀法例。当无法行使索引列的时辰,也要对sort_buffer_size和max_length_for_sort_data参数举办调解。留意where高于having,能写在where中的限制前提就不要去having限制了。 (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |