MRR

Multi-Range Read,多范围读,5.6以上版本开始支持

工作原理&优化效果:

将查询到的辅助索引结果放在一个缓冲(read_rnd_buffer_size = 4M)中

将buffer中的辅助索引根据主键(ROWID)进行排序

再根据上述排序后的主键(ROWID)顺序(回表)读取数据

减少磁盘随机访问,将随机访问转变成顺序访问,提高I/O读性能

减少buffer pool中的页面被替换次数

可批量处理对索引的查询操作

优化器开关optimizer_switch控制是否启用MRR:

默认未启用MRR

mrr = on & mrr_cost_based = on

mrr_cost_based设置为off时表示强制开启MRR

mrr_cost_based设置为on,表示优化器会通过基于成本的算法来确定是否 需要开启MRR(也就是,不强制启用MRR)

执行计划中现实 Using MRR

5.6.35中有bug

BKA

Batched Key Access,批量索引访问,MySQL5.6开始支持

同时用于表连接以及join buffer时的索引访问

支持inner join、outer join、semi-join,以及nested-outer join

JOIN表扫描时效率更高,提高JOIN效率

默认未启用,需要手动开启:

optimizer_switch = "batched_key_access_on"

前置条件:mrr=on,mrr_cost_based=off

执行计划显示 Using join buffer (Batched Key Access)

ICP

index condition pushdown,MySQL5.6以上支持

主要优化效果:

在以前,是把index key过滤后的全部记录(数据集较大)丢给server层,再进行index filter、table filter过滤

有了ICP,就可以把index filter下推(pushdown)到引擎层进行过滤

好处很明显,减少server层数据集,减少数据传输,提高处理效率

支持range、ref、eq_ref、eq_or_null类型查询

执行计划显示 Using index condition 意向

具体的执行计划看optimize_trace

最新文章

  1. golang中不定参数与数组切片的区别
  2. java基础 - 冒泡排序,随机数算法
  3. RFID FDX HDX Technology
  4. main方法无法编译
  5. C扩展Python - official docs - defining new type
  6. uvalive 2797 Monster Trap
  7. 网络技术教程笔记(20)ISDN
  8. 评测:VPS推荐digitalocean和Vultr和Linode
  9. spring-jms
  10. iptables介绍
  11. python-day12 MySQL、sqlalchemy
  12. 对比JavaScript中的Continue和Break
  13. jQuery工具--$.each()和$.merge()
  14. weblogic 乱码
  15. Problem B 一元二次方程类
  16. 获取assets文件内容,raw内容
  17. hdu 1035 Robot Motion(dfs)
  18. JVM内存管理之GC算法精解(五分钟让你彻底明白标记/清除算法)
  19. Jekins持续集成,gitlab代码仓库
  20. C# 空字典遍历

热门文章

  1. PathVariable传过来的中文乱码是怎么回事
  2. Confluence 实现公司wiki【转】
  3. ActiveMQ持久化
  4. Socket: Java Socket 几个重要的TCP/IP选项解析(转)
  5. mac php7.2 安装mcrypt扩展
  6. (转)golang获取当前时间、时间戳和时间字符串及它们之间的相互转换
  7. Apache调优(二)
  8. PhpStorm文本选择范围的纵向起始位置可选
  9. JQuery 自定义属性取值 赋值
  10. Linux 指令表