mysql 如果条件一不满足 使用条件二_深入探讨 MySQL 的 order by 优化

本文深入探讨了MySQL的ORDER BY语句优化,特别是当ORDER BY条件不能完全匹配索引时如何利用索引。通过官方文档的解释和多个示例分析,展示了哪些情况下SELECT + ORDER BY可以使用索引,哪些情况无法利用索引排序,并提供了优化策略,如调整sort_buffer_size和read_rnd_buffer_size等。
摘要由CSDN通过智能技术生成

专注于Java领域优质技术,欢迎关注

文章转载自yangyidba , 作者 杨奇龙

一 前言

为什么是再说呢?因为前面已经写过 《order by 原理以及优化》 ,介绍 order by 的基本原理以及优化。如果觉得对 order by 原理了解不透彻可以参考其他同行的文章《MySQL排序内部原理探秘》.本文是基于官网文档的二刷(基本翻译+测试验证),看完本文大部分开发同学可以了解到什么样的select + order by 语句可以使用索引,什么样的不能利用到索引排序

二 分析

2.1 官方标准介绍

对于select order by语句如何能够利用到索引,官方表述如下:

"The index can also be used even if the ORDER BY does not match the index exactly, as long as all of the unused portions of the index and all the extra ORDER BY columns are constants in the WHERE clause."

翻译一下就是

即使ORDER BY语句不能精确匹配(组合)索引列也能使用索引,只要WHERE条件中的所有未使用的索引部分和所有额外的ORDER BY列为常数就行。如何理解这句话呢?我们通过具体用例来解释。

2.2 准备工作

a7d5d51566126ca0ef09cae888fe1676.png
a7c857bd55bec7edd4e1e564579c6f61.png
a4317919e7d635d6ed06d0e422511637.png

2.3 能够利用索引的例子分析

官方的文档 中介绍有7个例子可以使用索引进行排序。如果使用explain/desc工具查看执行计划中的extra中出现了Using filesort则说明sql没有用到排序优化。

案例一

SELECT * FROM t1 ORDER BY key_part1,key_part2,...;

9f88c9c358c2914e16c6b8eb740fb3db.png

分析:

显然上述sql没有利用到索引排序. type=ALL Extra=Using fileso

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值