加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

MySQL数据库ORDER BY优化总结(为排序使用索引)

发布时间:2019-12-26 00:14:51 所属栏目:编程 来源:站长网
导读:副问题#e# 在行使order by时,常常呈现Using filesort,以是对付此类sql语句我们必要去极力优化,使其只管行使Using index。 那么,我们对付这范例的语句我们怎么去做优化呢?由于这一块照旧较量轻易夹杂的,以是我弄了个尝试,信托各人跟我一路做下尝试就都

双路排序:在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限制了。

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读