MySQL 5.7 ORDER BY排序的优化是怎样的


这篇文章将为大家详细讲解有关MySQL 5.7 ORDER BY排序的优化是怎样的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。 在一些情况下,MySQL可以使用索引而无需额外的排序来执行ORDER BY排序。
即使ORDER BY没有匹配上指定的索引,也可以使用索引,只要所有未使用索引部分和所有ORDER BY字段是WHERE语句的常数。

在某些情况下,MySQL不会使用索引进行排序

查询使用多个不同的索引进行排序 查询在索引的非连续部分上使用排序
排序中既有ASC又有DESC
用于获取数据的索引不同于ORDER BY排序的索引
查询使用表达式进行排序,而不是使用索引的字段名进行排序
查询关联了许多表,并且ORDER BY使用的字段不是返回行的第一个非常量表中的字段(在EXPLAIN执行计划输出中第一个表的连接类型不是const)

查询使用不同的ORDER BY和GROUP BY表达式

在排序中只使用了一个字段的前缀索引

索引没有按照顺序存储行,例如MEMORY表的HASH索引

如果一个查询包含GROUP BY,但是你不想将查询结果排序,可以通过ORDER BY NULL语句来取消排序
与提升ORDER BY速度相关的系统参数:

增加sort_buffer_size参数的值。理想状况下,这个参数的值应该足够大,可以将整个结果集放入到sort buffer中,避免到磁盘中进行排序。

存储在缓冲区的列值的大小是由max_sort_length参数决定的。

想要监控排序在磁盘上的合并数量,可以通过观察Sor开发云主机域名t_merge_passes这个状态参数。
mysql> show global status like ‘Sort_merge_passes’;
+——————-+——-+
| Variable_name | Value |
+——————-+——-+
| Sort_merge_passes | 0 |
+——————-+——-+
1 row in set (0.11 sec)

增加read_rnd_buffer_size参数的值。

定义列的时候,仅分配它们需要的值,这样每行在排序时可以使用更少的内存。例如,如果每列的值不超过16个字符,CHAR(16)比CHAR(200)更好。

改变tmpdir系统变量,将其指向一个专用的大容量的文件系统目录。

如果ORDER BY排序没有使用索引,但是语句中带有LIMIT语句,优化器可能会避免使用合并文件而是在内存中进行排序。
关于MySQL 5.7 ORDER BY排序的优化是怎样的就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

相关推荐: mysql创建root普通用户和修改删除功能的案例

mysql创建root普通用户和修改删除功能的案例?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小编给大家带来的参考内容,让我们一起来看看吧!方法1: 用SET PASSWORD命令方法2:用mysqladmin  如果r…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 06/22 09:28
下一篇 06/22 09:28

相关推荐