MRR,BKA,ICP相关

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

 

posted @ 2019-09-18 15:08  AllenHU320  阅读(174)  评论(0编辑  收藏  举报