mysql range_MySQL - RANGE优化篇

本文详细介绍了MySQL中Range Access的工作原理,包括单列索引和复合索引的范围优化。通过示例解释了如何处理WHERE子句中的范围条件,以及如何优化嵌套的AND/OR结构。还提到了内存限制对范围优化的影响,并给出了行构造器的优化写法。建议关注新版本以获取更好的优化效果。
摘要由CSDN通过智能技术生成

Range Access使用单个索引的方式来检索包含在一个或多个索引值区间内的表行的子集。它也适用于单列或复合(组合)索引...

单列索引

对于单列索引,索引值区间可以方便地用WHERE语句中的相应范围条件表示。优化器在常量传播阶段,会将一些非常量值转换为常量。

定义

对于BTREE索引和HASH索引来说,索引的范围优化基本上只适用于等值查询。譬如=, <=>, IN(), IS NULL, IS NOT NULL操作符。

对于HASH索引,BTREE索引同样支持非等值查询,譬如>, =, <=, BETWEEN, !=, <>和LIKE(注意,like的常量值不能以通配符开头)

对于所有索引类型,多个范围条件与OR或AND在一起会形成一个范围条件

代码示例

以下是在WHERE子句中使用范围条件进行查询的一些示例:

SELECT * FROM t1

WHERE key_col > 1

AND key_col < 10;

SELECT * FROM t1

WHERE key_col = 1

OR key_col IN (15,18,20);

SELECT * FROM t1

WHERE key_col LIKE 'ab%'

OR key_col BETWEEN 'bar' AND 'foo';

提取过程

MYSQL会尽可能从索引中提取范围条件,在提取过程中,利用索引将不能提取范围条件的过滤掉,然后对剩下的数据进行额外的筛选

代码示例

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值