zoukankan      html  css  js  c++  java
  • optimize table 表优化问题

    语法: optimize table '表名'

    一,原始数据

    1,数据量

     

    2,存放在硬盘中的表文件大小

    3,查看一下索引信息

    索引信息中的列的信息说明。

    Table :表的名称。
    Non_unique:如果索引不能包括重复词,则为0。如果可以,则为1。
    Key_name:索引的名称。
    Seq_in_index:索引中的列序列号,从1开始。
    Column_name:列名称。
    Collation:列以什么方式存储在索引中。在MySQLSHOW INDEX语法中,有值’A’(升序)或NULL(无分类)。
    Cardinality:索引中唯一值的数目的估计值。通过运行ANALYZE TABLE或myisamchk -a可以更新。基数根据被存储为整数的统计数据来计数,所以即使对于小型表,该值也没有必要是精确的。基数越大,当进行联合时,MySQL使用该索引的机会就越大。
    Sub_part:如果列只是被部分地编入索引,则为被编入索引的字符的数目。如果整列被编入索引,则为NULL。
    Packed:指示关键字如何被压缩。如果没有被压缩,则为NULL。
    Null:如果列含有NULL,则含有YES。如果没有,则为空。
    Index_type:存储索引数据结构方法(BTREE, FULLTEXT, HASH, RTREE)

    二,删除一半数据

     

     按常规思想来说,如果在数据库中删除了一半数据后,相对应的.MYD,.MYI文件也应当变为之前的一半。但是删除一半数据后,.MYD.MYI尽然连1KB都没有减少,这是多么的可怕啊。

    我们再来看一看,索引信息 

     

     对比一下,这次索引查询和上次索引查询,里面的数据信息基本上是上次一次的一半,这点还是合乎常理。

     三,用optimize table来优化一下

     

     1,查看一下.MYD,.MYI文件的大小

     2,查看一下索引信息

     

    从以上数据我们可以得出,ad_code,ad_code_ind,from_page_url_ind等索引机会差不多都提高了85%,这样效率提高了好多。

    四,小结

    个人是这样理解的,当你删除数据时,mysql并不会回收已删除的数据所占据的存储空间,以及索引位。而是空在那里,而是等待新的数据来弥补这个空缺,这样就有一个缺少,如果一时半会,没有数据来填补这个空缺,那这样就太浪费资源了。所以对于写比较频繁的表,要定期进行optimize,一个月一次,看实际情况而定了。

     
    举个例子来说吧。有100个java程序员辞职了,但是呢只是人走了,java的职位还在那里,这些职位不会撤销,要等新的java程序员来填补这些空位。招一个好的程序员,比较难。我想大部分时间会空在那里。哈哈。

     

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

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

  • 相关阅读:
    Building a flexiable renderer
    Indirect Illumination in mental ray
    我的心情
    Cellular Automata
    Subsurface Scattering in mental ray
    Shader Types in mental ray
    BSP Traversal
    我的渲染器终于达到了MR的速度
    How to handle displacement and motion blur
    说明
  • 原文地址:https://www.cnblogs.com/vanl/p/5473790.html
Copyright © 2011-2022 走看看