mysql 5.6 改进一


mysql 5.6 改进:


(1)online DDL


相关变量:

mysql> show global variables  like  '%alter%';

+----------------------------------+-----------+

| Variable_name                    | Value     |

+----------------------------------+-----------+

| innodb_online_alter_log_max_size | 134217728 |

| old_alter_table                  | OFF       |

+----------------------------------+-----------+


innodb_online_alter_log_max_size:alter缓存区,默认为128M

old_alter_table:是否启用online DDL


语法:

alter table  t_name  add  index indx01(col),

algorithm = {default|inplace|copy},

lock ={default | none | share | exclusive}


原理:

从源表中cp数据到新表,并且记录下源表的所有数据变动,最后应用日志,更改表明。


note:开启online DDL 后 并不是所有的alter都能按照inplace方式进行,比如,change .



(2).MRR

相关变量:

mysql> show global variables  like  '%switch%'\G  ;

*************************** 1. row ***************************

Variable_name: optimizer_switch

        Value: 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,subquery_materialization_cost_based=on,use_index_extensions=on


和mrr相关的参数有

mrr:开启mrr

mrr_cost_based:基于开销由mysql自己决定是否使用mrr

read_rnd_buffer_size:随机读缓存大小。



作用:

<1>将非顺序io转变为顺序io

<2>.拆分查询




(3).ICP

将数据的过滤放在存储引擎层。

在mysql 5.6 之前 ,mysql使用索引添加查询后,会通过索引查询到的数据读取到内存中,然后在内存中(server层)通过where的其他字段

过滤掉不需要的数据.

在mysql 5.6 中,在进行索引条件查询时 , mysql 会尝试把where的条件放在存储引擎层过滤,然后再把数据读取到server层,

这样大大降低了不必要的io操作,提高性能


参考资料:

http://m.blog.csdn.net/blog/z1547840014/25377713

http://mdba.cn/?p=315

http://www.ruzuojun.com/topic/860.html




你可能感兴趣的:(mysql,DDL,MRR,online,icp)