• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

MySQL定期分析稽查与优化表

mysql 搞代码 7年前 (2018-06-05) 147次浏览 已收录 0个评论

mysql定期分析检查与优化表

定期分析表

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] 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在执行期间将对表进行锁定,因此请注意这些操作要在数据库不繁忙的时候执行

****


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:MySQL定期分析稽查与优化表

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址