优化器针对索引的算法
自优化能力:
3.1 MySQL索引的自优化-AHI(自适应HASH索引)MySQL的InnoDB引擎,能够创建只有Btree。AHI作用: 自动评估"热"的内存索引page,生成HASH索引表。帮助InnoDB快速读取索引页。加快索引读取的所读。相当与索引的索引。
3.2 MySQL索引的自优化-Change buffer比如insert,update,delete 数据。对于聚簇索引会立即更新。对于辅助索引,不是实时更新的。在InnoDB 内存结构中,加入了insert buffer(会话),现在版本叫change buffer。Change buffer 功能是临时缓冲辅助索引需要的数据更新。当我们需要查询新insert 的数据,会在内存中进行merge(合并)操作,此时辅助索引就是最新的。
优化器算法介绍:
查询:mysql> select @@optimizer_switch;
| @@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 |
如何修改?
3.6 BNLJ
在 A和B关联条件匹配时,不再一次一次进行循环。而是采用一次性将驱动表的关联值和非驱动表匹配.一次性返回结果主要优化了, CPU消耗,减少了IO次数
In EXPLAIN output, use of BNL for a table is signified when the Extra value contains Using join buffer (Block Nested Loop)
3.7 BKA 看图说话。
主要作用,使用来优化非驱动表的关联列有辅助索引。BNL+ MRR的功能。开启方式: mysql> set global optimizer_switch=‘mrr=on,mrr_cost_based=off’;mysql> set global optimizer_switch=‘batched_key_access=on’;重新登陆生效。