现在的位置: 首页 > 综合 > 正文

mysql表的优化

2013年08月15日 ⁄ 综合 ⁄ 共 854字 ⁄ 字号 评论关闭

author:skate
time:2012/02/29

 

mysql表的优化

如果表的数据有大量的变化,或对含有可变长度行的表(含有VARCHAR, BLOB或TEXT列的表)进行了很多更改,应该对表进行优化整理。使用OPTIMIZE TABLE后,被删除的记录被保持在链接清单中,而后续的INSERT操作会重新使用旧的记录位,从而达到可以重新利用未使用的空间,并整理数据文件的碎片。

 

一般,不需要运行OPTIMIZE TABLE。如果可变长度的表更新很频繁,也不需要经常运行,可以对特定的表每周或每月一次即可

 

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

对于MyISAM表,OPTIMIZE TABLE按如下方式操作:
1.如果表已经删除或分解了行,则修复表。
2.如果未对索引页进行分类,则进行分类。
3.如果表的统计数据没有更新(并且通过对索引进行分类不能实现修复),则进行更新

 

样例:
mysql> optimize table t1;

注意,在OPTIMIZE TABLE运行过程中,MySQL会锁定表。所以在使用时一定要慎用,选择业务低峰期维护。

 

如果mysql是主从环境的话,要记得使用no_write_to_binlog,这样不会把操作传递到从服务器上,如下:

mysql> optimize no_write_to_binlog table t1;

除了optimize可以优化表之外,myisamchk也可以优化表,但只对myisam表有作用,例如:

 

myisamchk对表优化
为了组合碎片记录并且消除由于删除或更新记录而浪费的空间
shell> myisamchk -r tbl_name

对所有的索引进行排序以便更快地查找键值
# myisamchk -S tablename

 

对指定的索引进行排序以便更快地查找键值
mysql> show index from tablename;
# myisamch -R 1 tablename

若要更详细就请看官方文档

 

 

 

 

-------------end--------------

 

 

 

抱歉!评论已关闭.