zoukankan      html  css  js  c++  java
  • mysql analyze和optimize

    Analyze Table

    MySQL 的Optimizer(优化元件)在优化SQL语句时,首先需要收集一些相关信息,其中就包括表的cardinality(可以翻译为“散列程度”),它表示某个索引对应的列包含多少个不同的值——如果cardinality大大少于数据的实际散列程度,那么索引就基本失效了。

    我们可以使用SHOW INDEX语句来查看索引的散列程度:

    SHOW INDEX FROM PLAYERS;

    TABLE   KEY_NAME COLUMN_NAME CARDINALITY
    ------- -------- ----------- -----------
    PLAYERS PRIMARY PLAYERNO             14

    因为此时PLAYER表中不同的PLAYERNO数量远远多于14,索引基本失效。
    下面我们通过Analyze Table语句来修复索引:

    ANALYZE TABLE PLAYERS;
    SHOW INDEX FROM PLAYERS;
    结果是:
    TABLE   KEY_NAME COLUMN_NAME CARDINALITY
    ------- -------- ----------- -----------
    PLAYERS PRIMARY PLAYERNO           1000

    此时索引已经修复,查询效率大大提高。

    需要注意的是,如果开启了binlog,那么Analyze Table的结果也会写入binlog,我们可以在analyze和table之间添加关键字local取消写入 

    Optimize Table

    如果您已经删除了表的一大部分,或者如果您已经对含有可变长度行的表(含有VARCHAR, BLOB或TEXT列的表)进行了很多更改,则应使用 OPTIMIZE TABLE。被删除的记录被保持在链接清单中,后续的INSERT操作会重新使用旧的记录位置。您可以使用OPTIMIZE TABLE来重新 利用未使用的空间,并整理数据文件的碎片。

    在多数的设置中,您根本不需要运行OPTIMIZE TABLE。即使您对可变长度的行进行了大量的更新,您也不需要经常运行,每周一次或每月一次 即可,只对特定的表运行。

    OPTIMIZE TABLE只对MyISAM, BDB和InnoDB表起作用。

    注意,在OPTIMIZE TABLE运行过程中,MySQL会锁定表。

    与Analyze Table一样,Optimize Table也可以使用local来取消写入binlog。

    不积跬步,无以至千里!
  • 相关阅读:
    轻松管理您的网络password
    尝到awk
    重载虚函数的相关问题
    阿赫亚web安全JSON
    SplitContainer如何实现左侧导航,正确显示和导航内容
    POJ 3450 Corporate Identity KMP解决问题的方法
    virtio-blk分析
    JavaScript权威指南科03章 种类、值和变量(1)
    iOS开展-Xcode技巧总结(持续更新)
    POI设置边框
  • 原文地址:https://www.cnblogs.com/f66666/p/9789998.html
Copyright © 2011-2022 走看看