千家信息网

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

发表于:2025-02-23 作者:千家信息网编辑
千家信息网最后更新 2025年02月23日,这篇文章将为大家详细讲解有关MySQL 5.7 ORDER BY排序的优化是怎样的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。在一些情况下,MySQ
千家信息网最后更新 2025年02月23日MySQL 5.7 ORDER BY排序的优化是怎样的

这篇文章将为大家详细讲解有关MySQL 5.7 ORDER BY排序的优化是怎样的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

在一些情况下,MySQL可以使用索引而无需额外的排序来执行ORDER BY排序。
即使ORDER BY没有匹配上指定的索引,也可以使用索引,只要所有未使用索引部分和所有ORDER BY字段是WHERE语句的常数。

SELECT * FROM t1  ORDER BY key_part1,key_part2,... ;SELECT * FROM t1  WHERE key_part1 = constant ORDER BY key_part2;SELECT * FROM t1  ORDER BY key_part1 DESC, key_part2 DESC;SELECT * FROM t1  WHERE key_part1 = 1  ORDER BY key_part1 DESC, key_part2 DESC;SELECT * FROM t1  WHERE key_part1 > constant ORDER BY key_part1 ASC;SELECT * FROM t1  WHERE key_part1 < constant ORDER BY key_part1 DESC;SELECT * FROM t1  WHERE key_part1 = constant1 AND key_part2 > constant2 ORDER BY key_part2;

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

查询使用多个不同的索引进行排序

SELECT * FROM t1 ORDER BY key1, key2;

查询在索引的非连续部分上使用排序

SELECT * FROM t1 WHERE key2=constant ORDER BY key_part2;

排序中既有ASC又有DESC

SELECT * FROM t1 ORDER BY key_part1 DESC, key_part2 ASC;

用于获取数据的索引不同于ORDER BY排序的索引

SELECT * FROM t1 WHERE key2=constant ORDER BY key1;

查询使用表达式进行排序,而不是使用索引的字段名进行排序

SELECT * FROM t1 ORDER BY ABS(key);SELECT * FROM t1 ORDER BY -key;

查询关联了许多表,并且ORDER BY使用的字段不是返回行的第一个非常量表中的字段(在EXPLAIN执行计划输出中第一个表的连接类型不是const)

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

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

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

如果一个查询包含GROUP BY,但是你不想将查询结果排序,可以通过ORDER BY NULL语句来取消排序

INSERT INTO fooSELECT a, COUNT(*) FROM bar GROUP BY a ORDER BY NULL;

与提升ORDER BY速度相关的系统参数:

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

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

想要监控排序在磁盘上的合并数量,可以通过观察Sort_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排序的优化是怎样的就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

排序 索引 查询 参数 字段 语句 系统 不同 内存 内容 可以通过 情况 文件 文章 更多 知识 磁盘 篇文章 结果 表达式 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 腾讯云子用户管理特定服务器 软件开发公司常见部门 当前与服务器连接 智能互联网络技术大专 宜兴进口软件开发大全 网络安全靶场虚拟化平台 指尖跳动互联网科技有限公司 电脑软件开发火星时代 怎么从数据库爬文献 GALE数据库技术支持 司法局网络安全责任书模板 脏小豆的服务器什么版本 软件开发协助设备 数据库定时清除表数据 电大计算机网络技术专业 我的世界点赞最少的服务器 软件开发公司都有哪些岗位 自考计算机网络技术买什么书 星际蜗牛能开游戏服务器吗 帝国数据库备份王 描述软件开发阶段的工具 宣城电力软件开发费用 软件开发评价管理经验不足 赣南医学院图书馆服务器地址 网络安全管理规范修改记录 域网络部分电脑无法访问服务器 腾讯网络技术服务有限公司 惠州餐饮软件开发咨询 金蝶专业版数据库表 数据库库存与删除
0