首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > Mysql >

MySQL定期分析稽查与优化表

2013-03-28 
MySQL定期分析检查与优化表?[option]? option??{QUICK?|?FAST?|?MEDIUM?|?EXTENDED?|?CHANGED}检查一个或

MySQL定期分析检查与优化表
?[option]?MySQL定期分析稽查与优化表

option?=?{QUICK?|?FAST?|?MEDIUM?|?EXTENDED?|?CHANGED}


检查一个或多个表是否有错误。CHECK TABLE对MyISAM和InnoDB表有作用。对于MyISAM表,关键字统计数据被更新。

mysql>?check?table?a;
+--------+-------+----------+----------+
|?Table??|?Op????|?Msg_type?|?Msg_text?|
+--------+-------+----------+----------+
|?test.a?|?check?|?status???|?OK???????|?
+--------+-------+----------+----------+
1?row?in?set?(0.00?sec)


CHECK TABLE也可以检查视图是否有错误,比如在视图定义中被引用的表已不存在。
我们为上面的表a创建一个视图

mysql>?create?view?a_view?as?select?*?from?a;
Query?OK,?0?rows?affected?(0.02?sec)


然后CHECK一下该视图,发现没有问题

mysql>?check?table?a_view;
+-------------+-------+----------+----------+
|?Table???????|?Op????|?Msg_type?|?Msg_text?|
+-------------+-------+----------+----------+
|?test.a_view?|?check?|?status???|?OK???????|?
+-------------+-------+----------+----------+
1?row?in?set?(0.00?sec)


现在删掉视图依赖的表

mysql>?drop?table?a;
Query?OK,?0?rows?affected?(0.01?sec)


再CHECK一下刚才的视图,发现报错了

mysql>?check?table?a_view\G;
***************************?1.?row?***************************
???Table:?test.a_view
??????Op:?check
Msg_type:?Error
Msg_text:?Table?'test.a'?doesn't?exist
***************************?2.?row?***************************
???Table:?test.a_view
??????Op:?check
Msg_type:?Error
Msg_text:?View?'test.a_view'?references?invalid?table(s)?or?column(s)?or?function(s)?or?definer/invoker?of?view?lack?rights?to?use?them
***************************?3.?row?***************************
???Table:?test.a_view
??????Op:?check
Msg_type:?error
Msg_text:?Corrupt
3?rows?in?set?(0.00?sec)

ERROR:?
No?query?specified


定期优化表

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


如果您已经删除了表的一大部分,或者如果您已经对含有可变长度行的表(含有VARCHAR, BLOB或TEXT列的表)进行了很多更改,则应使用OPTIMIZE TABLE。被删除的记录被保持在链接清单中,后续的INSERT操作会重新使用旧的记录位置。您可以使用OPTIMIZE TABLE来重新利用未使用的空间,并整理数据文件的碎片。
在多数的设置中,您根本不需要运行OPTIMIZE TABLE。即使您对可变长度的行进行了大量的更新,您也不需要经常运行,每周一次或每月一次即可,只对特定的表运行。
OPTIMIZE TABLE只对MyISAM, BDB和InnoDB表起作用。
对于MyISAM表,OPTIMIZE TABLE按如下方式操作:
如果表已经删除或分解了行,则修复表。
如果未对索引页进行分类,则进行分类。
如果表的统计数据没有更新(并且通过对索引进行分类不能实现修复),则进行更新。

mysql>?OPTIMIZE?table?a;
+--------+----------+----------+-----------------------------+
|?Table??|?Op???????|?Msg_type?|?Msg_text????????????????????|
+--------+----------+----------+-----------------------------+
|?test.a?|?optimize?|?status???|?Table?is?already?up?to?date?|?
+--------+----------+----------+-----------------------------+
1?row?in?set?(0.00?sec)


****
需要注意的是无论是ANALYZE,CHECK还是OPTIMIZE在执行期间将对表进行锁定,因此请注意这些操作要在数据库不繁忙的时候执行

****

热点排行