您当前的位置: 首页 > 数据库教程 > MySQL教程 > MySQL定期分析检查与优化表

MySQL定期分析检查与优化表

作者:不详 来源:网络 发布时间: 2011-08-30 14:52 点击:
听DBA的人说,相比oracle,MySQL就是一个玩具级别的数据库,在网易门户中,DBA基本很少去管理到MySQL的东西,所以我们产品使用到的MySQL的一些配置和优化还是需要我们开发人员自己动手,下面就简单介绍一下实用的定期优化方法 定期分析表 ANALYZE [LOCAL | NO_WRITE_TO

MySQL定期分析检查与优化表

  听DBA的人说,相比oracle,MySQL就是一个玩具级别的数据库,在网易门户中,DBA基本很少去管理到MySQL的东西,所以我们产品使用到的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]  [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 陈于喆
  QQ:34174409 

分享到:
本文"MySQL定期分析检查与优化表"由远航站长收集整理而来,仅供大家学习与参考使用。更多网站制作教程尽在远航站长站。
顶一下
(0)
0%
踩一下
(0)
0%
[点击 次] [返回上一页] [打印]
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 密码: 验证码:
关于本站 - 联系我们 - 网站声明 - 友情连接- 网站地图 - 站点地图 - 返回顶部
Copyright © 2007-2013 www.yhzhan.com(远航站长). All Rights Reserved .
远航站长:为中小站长提供最佳的学习与交流平台,提供网页制作与网站编程等各类网站制作教程.
官方QQ:445490277 网站群:26680406 网站备案号:豫ICP备07500620号-4