30.1 表的维护操作的类型
1.一个表检查执行一个完整性检查来确保表的结构和内容没有问题。这个操作能够被做对于MyISAM和InnoDB表
2.一个表的修复更正完整性问题来修复表到一个已知和可使用状态。这个可以使用MyISAM表来做。
3.一个表的分析更新数据关于索引键值的分布。一个优化者可以使用的信息来产生更好的执行计划对于表的查询。这个操作可以由MyISAM和InnoDB存储引擎来做。
4.一个表的优化识别表以至于它的内容可以更加有效的被获得。这操作可以由MyISAM和InnoDB表来做。
表分析和优化你可以执行周期性的检测来保持你的表在最好的状态下:
1.当MySQL分析一个MyISAM或者InnoDB表时,它更新索引数据。这个优化者使用这些数据,当处理查询时来做出更好的决定关于如何更好地查询相关额记录在表中和顺序读取表在一个join中。
2.当MySQL优化一个MyISAM表时,它重新收回没有使用的空间,排序索引和更新索引数据。周期性的defragmenting是有用的加速表的访问对于包含可变长度的列如VARCHAR,或者TEXT。
30.2 SQL 语句对于Table维护
有一下的语句来进行表的维护:
1.check table用来完整性检查,如果check table有输出表明表有问题,这个表应该被修复
2.repair table用来修复,修复已经corrupted的表
3.analyze table用于分析,
4.optimize table用来优化
30.3 client和utility程序对于Table MainTence
一些MySQL的客户端提供了一个front end 来提出table-maintenance语句:
1.MySQL Administrator提供了一个point-and-click接口用于表的检测,修复和优化操作。
2.mysqlcheck能够用来check,repair,analyze和optimize表。它决定了
30.3.1 这mysqlcheck客户端程序
mysqlcheck检测,修复,分析和优化表。它能够执行所有这些操作在MyISAM表上,和能够执行他们中的一些在InnoDB表上。它提供一个command-line接口对于各种SQL语句来指导服务器来执行表的维护,例如CHECK TABLE
使用--database(or -B)选项,mysqlcheck翻译它的非选项参数作为数据块的名字和检测所有表在每个命名的数据库中。这接下来命令检查表在world和test数据库:
mysqlcheck --databases world test
30.3.2 这myisachk
和mysqlcheck不同:
1.myisamchk能够disabling或者enabling索引,尽管这些操作
2.两个程序很大的不同在它们的操作模式上。mysqlcheck是一个客户单程序和Mysql共享通过一个网络连接。这意味着mysqlcheck需要服务器运行。相反,myisamch并不是一个客户端程序。它直接操作代表MyISAM表的文件。
3.这两种程序它们的关系也是不同的。使用myisamchk,你需要确保服务器没有让表open和没有同时使用它们。它是可能的得到错误的结果引发表毁坏如果表文件被使用myisamchk和服务器同时使用。使用myisamchk时先停止server。
30.4 repairing InnoDB Tables
30.5 Enabling MyISAM自动修复