1.优化器针对索引算法
1.1MySQL索引自优化-AHI(自适应HASH索引)
MySQL的InnoDB引擎,能够创建只有Btree。
AHI作用:
自动评估"热"的内存索引page,生成HASH索引表。
帮助InnoDB快速读取索引页。加快索引读取的所读。
相当与索引的索引。
1.2MySQL索引的自优化-Change buffer
比如insert,update,delete 数据。
对于聚簇索引会立即更新。
对于辅助索引,不是实时更新的。
在InnoDB 内存结构中,加入了insert buffer(会话),现在版本叫change buffer。
Change buffer 功能是临时缓冲辅助索引需要的数据更新。
当我们需要查询新insert 的数据,会在内存中进行merge(合并)操作,此时辅助索引就是最新的
1.3优化器算法介绍
mysql> select @@optimizer_switch;
index_merge=on,
index_merge_union=on,
index_merge_sort_union=on,
index_merge_intersection=on,
engine_condition_pushdown=on,
index_condition_pushdown=on,
mrr=on,mrr_cost_based=on,
block_nested_loop=on,
batched_key_access=off,
materialization=on,
semijoin=on,
loosescan=on,
firstmatch=on,
duplicateweedout=on,
subquery_materialization_cost_based=on,
use_index_extensions=on,
condition_fanout_filter=on,
derived_merge=on |修改方式:1.通过更改my.cnf文件2.MySQL> set global optimizer_switch=‘batched_key_access=on‘; 开启算法
1.4 ICP索引下推
解决了,联合索引只能部分应用情况。
为了使减少没必要的数据页被扫描。
将不走索引的条件,在engine层取数据之前先做c二次过滤。
一些无关数据就会被提前过滤掉。
1.5 MRR (muti range read)
辅助索引 ---回表----> 聚簇索引
转换为
辅助索引 --->sort id --回表--> 聚簇索引
作用:辅助索引排序回表至聚簇索引
1.6 BNLJ
在 A和B关联条件匹配时,不再一次一次进行循环。
而是采用一次性将驱动表的关联值和非驱动表匹配.一次性返回结果
主要优化了, CPU消耗,减少了IO次数
1.7 BKA
主要作用,使用来优化非驱动表的关联列有辅助索引。
BNL+ MRR的功能。
开启方式:
mysql> set global optimizer_switch=‘mrr=on,mrr_cost_based=off‘;
mysql> set global optimizer_switch=‘batched_key_access=on‘;
重新登陆生效。