您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

MySQL定期分析检查与优化表的方法小结_MySQL

2024/4/1 13:29:50发布17次查看
定期分析表
analyze [local | no_write_to_binlog] table tbl_name [, tbl_name]
本语句用于分析和存储表的关键字分布。在分析期间,使用一个读取锁定对表进行锁定。这对于myisam, bdb和innodb表有作用。对于myisam表,本语句与使用myisamchk -a相当。
mysql使用已存储的关键字分布来决定,当您对除常数以外的对象执行联合时,表按什么顺序进行联合。
mysql> analyze table a;
+--------+---------+----------+-----------------------------+
| table  | op      | msg_type | msg_text                    |
+--------+---------+----------+-----------------------------+
| test.a | analyze | status   | table is already up to date |
+--------+---------+----------+-----------------------------+
1 row in set (0.00 sec)
定期检查表
check table tbl_name [, tbl_name]  [option]
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)
****
以上某些的段落是直接摘自mysql的中文手册,详细可以直接查看mysql的帮助手册,这里只是简单指出几种定期优化的方式,需要注意的是无论是analyze,check还是optimize在执行期间将对表进行锁定,因此请注意这些操作要在数据库不繁忙的时候执行
****
参考
《mysql 5.1参考手册》
by 陈于
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product