ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

60. analyze table和optimize table

2022-07-07 20:31:52  阅读:174  来源: 互联网

标签:name 60 索引 innodb table analyze optimize


1.Analyze table   

ANALYZE [NO_WRITE_TO_BINLOG | LOCAL]
    TABLE tbl_name [, tbl_name] ...

ANALYZE [NO_WRITE_TO_BINLOG | LOCAL]
    TABLE tbl_name
    UPDATE HISTOGRAM ON col_name [, col_name] ...
        [WITH N BUCKETS]

ANALYZE [NO_WRITE_TO_BINLOG | LOCAL]
    TABLE tbl_name
    DROP HISTOGRAM ON col_name [, col_name] ...

  1.analyze table 通常生成表的统计信息

  2.analyze table 支持innodb、NOB和myiasm表,但是它不支持视图。

  3.如果参数innodb_read_only被启用了,analyze table可能会失败,因为它不能更新在数据目录中表的统计信息

  4.对于使用了innodb的表,analyze table操作将会更新key distribution(秘钥分配),failure may occur even if the operation updates the table itself (for example, if it is a MyISAM table). To obtain the updated distribution statistics, set information_schema_stats_expiry=0

  5.analyze table 支持分区表

  6.在analyze table 期间,表会被加上一个read lock

  7.analyze table 会移除在缓存中的表的定义,而且它要求一个flush lock,因此,如果有长事务在执行的过程中,这个操作将会被阻塞,另外说明一下,analyze table 本身是quicklyd

  8.默认情况下,服务器将analyze table操作会记录到binary log中以便去给副本去复制

  9.对于innodb表,analyze table 将会更新索引树并相应的更新索引基数,注意这个索引基数只是一个估算值

  10.可以通过启用innodb_stats_persisent使得analyze table收集的统计信息更精确和稳定。这个参数主要是对索引列数据进行重大更改后运行analyze table(自动,但是有性能损耗)

  11.mysql中在join优化中,如果join不是走正确的索引,可以尝试运行analyze table,也可以在查询中使用force index强制使用特定索引。或者设置max_seeks_for_key系统变量以确保mysql更喜欢索引查找而不是表扫描。

  12.analyze table 将会清除information_schema.innodb_sys_tablestats表中的信息,并将status_initialized列设置为未初始化,下次访问该表时会再次收集统计信息。

2.Optimize table   

OPTIMIZE [NO_WRITE_TO_BINLOG | LOCAL]
    TABLE tbl_name [, tbl_name] ...

  (1)optimize table 重新组织表中的数据和关联索引数据的物理存储,目的在于减少存储空间和提高访问表时的i/o效率(有磁盘碎片整理功能)

  (2)对于独立的表空间(innodb_file_per_table)的表,当有大量的插入、更新、删除操作时,使用optimize table将会重新组织表和索引,并且回收磁盘空间供操作系统使用。

  (3)对于innodb表,optimize table 映射到alter table...force,它会重建表以更新索引统计信息并释放聚集索引中未使用的空间

3.innodb detailes

mysql> OPTIMIZE TABLE foo;
+----------+----------+----------+-------------------------------------------------------------------+
| Table    | Op       | Msg_type | Msg_text                                                          |
+----------+----------+----------+-------------------------------------------------------------------+
| test.foo | optimize | note     | Table does not support optimize, doing recreate + analyze instead |
| test.foo | optimize | status   | OK                                                                |
+----------+----------+----------+-------------------------------------------------------------------+

  optimize table对常规和分区innodb表使用在线DDL,这减少了并发DML操作的停机时间,optimize table触发的表的重建就地完成

      

   

  

标签:name,60,索引,innodb,table,analyze,optimize
来源: https://www.cnblogs.com/zmc60/p/16456010.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有