MySQL中optimizetable表名的作⽤
语法: 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索引个⼈是这样理解的,当你删除数据时,mysql并不会回收已删除的数据所占据的存储空间,以及索引位。⽽是空在那⾥,⽽是等待新的数据来弥补这个空缺,这样就有⼀个缺少,如果⼀时半会,没有数据来填补这个空缺,那这样就太浪费资源了。所以对于写⽐较频繁的表,要定期进⾏optimize,⼀个⽉⼀次,看实际情况⽽定了。
举个例⼦来说吧。有100个Python程序员辞职了,但是呢只是⼈⾛了,Python的职位还在那⾥,这些职
位不会撤销,要等新的Python程序员来填补这些空位。招⼀个好的程序员,⽐较难。我想⼤部分时间会空在那⾥。哈哈。
optimize table '表名'只对MyISAM, BDB和InnoDB引擎表起作⽤。
注意:在optimize table '表名'运⾏过程中,MySQL会锁定表。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论