mysql优化

本文介绍了MySQL5.6中的两种性能优化技术:MRR(Multi-RangeReadOptimization)和ICP(IndexConditionPushdownOptimization)。MRR通过排序二级索引减少随机访问,提高查询效率;而ICP则允许索引下推,减少了回表操作,提升了联合索引的利用率。通过对示例的解释,展示了这两种技术如何改善MyISAM和InnoDB存储引擎的查询性能。
摘要由CSDN通过智能技术生成

mysql 5.6

MRR(Multi-Range Read Optimization)

MRR优化前范围查询逻辑如下,会产生大量的随机访问,查询性能存在优化空间
1

MRR优化启用后会对普通索引中的二级路由进行一个排序,将大量随机访问转换为顺序访问,流程如下

  1. 对于MyISAM存储引擎,在去磁盘获取完整数据之前,会先按照rowid排好序,再去顺序的读取磁盘。
  2. 对于Innodb存储引擎,则会按照聚簇索引键值排好序,再顺序的读取聚簇索引。

2

ICP(Index Condition Pushdown Optimization)

索引条件下推优化,很形象的命名,索引检索的伴随的其他条件会下推至检索动作
案例sql
联合索引:(age,name)

select * from gallant_user where age between 20 and 35 and name like '%白';

没有索引下推优化前mysql底层逻辑,like语句基于最左匹配不会起作用,会遍历所有age满足的数据

  1. 遍历age 20-35之间索引对应的聚簇索引值
  2. 根据age索引对应的聚簇索引查询基表数据
  3. 过滤结果集,将name为“老白”的数据返回

启用索引下推优化后mysql底层逻辑,like语句会下推至存储引擎进行过滤

  1. 遍历age 20-35之间所有数据
  2. 过滤掉不满足name条件的数据,剩余联合索引中满足age条件,且满足name like语句条件的索引对应的聚簇索引值
  3. 根据聚簇索引查询基表数据
  4. 返回数据

上面的案例可以得出索引下推技术通过减少mysql底层回表的次数来提升检索性能

like ‘%关键字’

  1. 函数索引
  2. 联合索引结合索引下推优化
  3. 新增固定的后缀字段

函数索引用法

案例数据

idname
1superman
2spiderman
SELECT id, name FROM gallant_user where name like '%man';
create index idx_like_index on gallant.gallant_user ((name like '%man'));
// 查看函数索引
show index from gallant_user;
TableNon_uniqueKey_nameSeq_in_indexColumn_nameCollationCardinalityIndex_typeExpression
gallant_user0PRIMARY1idA2BTREE
gallant_user1idx_like_index1A1BTREE(name like _utf8mb3’%man’)
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值