MySQL中的统计信息相关参数介绍

  

  统计信息的作用   

     

  
  

     

  上周同事在客户现场遇到了由于统计信息的原因,导致应用数据迁移时间过慢,整个迁移差点失败。关键时刻同事发现测试环境与生产环境SQL语句执行计划不一致,立刻收集统计信息才保证迁移得以正常完成只
  统计信息对于SQL的执行时间有重要的影响,统计信息的不准确会导致SQL的执行计划不准确,从而致使SQL执行时间变慢,Oracle DBA非常了解统计信息的收集规则,同样在MySQL中也有相关的参数去控制统计信息。   

  

  
  

     

  相关参数   

     

  
  

     

  
  

     

  innodb_stats_auto_recalc   

     

  控制innodb是否自动收集统计信息,默认是打开的。当表中数据变化超过% 10时候,就会重新计算统计信息。参数的生效依赖于建表时指定innodb_stats_persistent是打开的或创造   表、修改表   时指定STATS_PERSISTENT=1采样页的个数通过参数innodb_stats_persistent_sample_pages来控制。   

     <李>   

  测试验证   

  李      

  创建一张测试表,并在表上创建一个索引:   

  
   dhytest STATS_PERSISTENT=();idx_id dhytest ();之前      

  通过mysql.innodb_index_stats可以查看索引最后收集统计信息的时间,这里的聚集索引我们删除先不用去看,只看自己创建的二级索引   

  
   * mysql。innodb_index_stats database_name=;   + | database_name | table_name | index_name,,,| last_update,,,,| stat_name,,| stat_value | sample_size | stat_description,,,,,,,,,|   + |测试,,,,,| dhytest,,| idx_id,,,,,| 2017-07-10 22:36:06 | n_diff_pfx01 |,,,,0 |大敌;,,,,1 | id,,,,,,,,,,,,,,,,|   |测试,,,,,| dhytest,,| idx_id,,,,,| 2017-07-10 22:36:06 | n_diff_pfx02 |,,,,0 |大敌;,,,,1 | id, DB_ROW_ID,,,,,,,,,,,|   |测试,,,,,| dhytest,,| idx_id,,,,,| 2017-07-10 22:36:06 | n_leaf_pages |,,,,1 |大敌;,,,空| |的叶子页索引   |测试,,,,,| dhytest,,| idx_id,,,,,| 2017-07-10 22:36:06 |大小,,,,|,,,,1 |大敌;,,索引中,零|的页面数量,,,|   + 7行(sec)      

  我们手工往表中插入数据,让数据的变化超过% 10   

  
   dhytest ();   查询好了,1行影响(0.00秒)      [root@shadow:/根5.7.18-log_Instance1 root@localhost:测试22:38:17]比;dhytest * dhytest;   查询好了,1行影响(0.00秒)   记录:1,重复:0,警告:0      [root@shadow:/根5.7.18-log_Instance1 root@localhost:测试22:38:28]比;dhytest * dhytest;   查询好,2行影响(0.00秒)   记录:2,重复:0,警告:0      [root@shadow:/根5.7.18-log_Instance1 root@localhost:测试22:38:31]比;dhytest * dhytest;   查询好,4行影响(0.01秒)   记录:4,重复:0,警告:0      [root@shadow:/根5.7.18-log_Instance1 root@localhost:测试22:38:34]比;dhytest * dhytest;   查询好,8行影响(0.00秒)   记录:8,重复:0,警告:0      [root@shadow:/根5.7.18-log_Instance1 root@localhost:测试22:38:35]比;dhytest * dhytest;   查询好,16行影响(0.00秒)   记录:16,重复:0,警告:0      

  这时我们在查看下mysql.innodb_index_stats表,last_update时间发生了变化   

  
     

  * mysql。innodb_index_stats database_name=;   + | database_name | table_name | index_name,,,| last_update,,,,| stat_name,,| stat_value | sample_size | stat_description,,,,,,,,,|   + |测试,,,,,| dhytest,,| idx_id,,,,,| 2017-07-10 22:38:28 | n_diff_pfx01 |,,,,1 |大敌;,,,,1 | id,,,,,,,,,,,,,,,,|   |测试,,,,,| dhytest,,| idx_id,,,,,| 2017-07-10 22:38:28 | n_diff_pfx02 |,,,,2 |大敌;,,,,1 | id, DB_ROW_ID,,,,,,,,,,,|   |测试,,,,,| dhytest,,| idx_id,,,,,| 2017-07-10 22:38:28 | n_leaf_pages |,,,,1 |大敌;,,,空| |的叶子页索引   |测试,,,,,| dhytest,,| idx_id,,,,,| 2017-07-10 22:38:28 |大小,,,,|,,,,1 |大敌;,,索引中,零|的页面数量,,,|   + 7行(sec)   

  null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

MySQL中的统计信息相关参数介绍