分析表语句
MySQL查询优化器是MySQL服务器的一个重要组件,它为查询创建最佳查询执行计划。对于特定的查询,查询优化器使用存储的密钥分发等因素来决定在哪些表应当你执行被连接的顺序加入,以及指标应当用于特定的表。
但是,密钥分发有时可能不准确,例如,在表中进行了大量数据更改(包括插入,删除或更新)之后。如果密钥分发不准确,查询优化器可能会选择可能导致严重性能问题的错误查询执行计划。
要解决此问题,可以运行ANALYZE TABLE表的语句,例如,以下语句分析示例数据库中的payments表。
ANALYZE TABLE payments;
如果自从运行ANALYZE TABLE语句后表没有更改,MySQL将不会再次分析表。如果再次运行上述语句:
ANALYZE TABLE payments;
优化表语句
在使用数据库时,您会执行许多更改,例如表中的插入,更新和删除数据,这些更改可能会导致表的物理存储碎片化。结果,数据库服务器的性能降低。
MySQL为您提供了一个语句,允许您优化表以避免此碎片整理问题。以下说明了如何优化表:
OPTIMIZE TABLE table_name;
建议您对经常更新的表执行此语句。例如,如果要优化orders表以对其进行碎片整理,则可以执行以下语句:
OPTIMIZE TABLE orders;
检查表语句
数据库服务器可能发生错误,例如,服务器意外关闭,将数据写入硬盘时出错等。这些情况可能会使数据库运行不正常,在最坏的情况下,它可能会崩溃。
MySQL允许您使用CHECK TABLE语句检查数据库表的完整性。以下说明了CHECK TABLE语句的语法:
CHECK TABLE table_name;
CHECK TABLE语句检查表及其索引。例如,您可以使用CHECK TABLE语句检查orders表,如下所示:
CHECK TABLE orders;
CHECK TABLE语句仅检测数据库表中的问题,但不会修复它们。要修复表,请使用REPAIR TABLE语句。
修复表语句
REPAIR TABLE语句允许您修复数据库表中发生的一些错误。MySQL不保证REPAIR TABLE语句可以修复表可能具有的所有错误。
以下是REPAIR TABLE语句的语法:
REPAIR TABLE table_name;
假设表中存在一些错误,orders您需要修复它们,您可以将REPAIR TABLE语句用作以下查询:
REPAIR TABLE discounts;
MySQL返回它对表所做的操作,并显示表是否已修复。
+---------------------+--------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+---------------------+--------+----------+----------+
| mysqldemo.discounts | repair | status | OK |
+---------------------+--------+----------+----------+
1 row in set (0.01 sec)
如果表的引擎不是 MyISAM 是不支持 REPAIR 修复
+---------------------+--------+----------+---------------------------------------------------------+
| Table | Op | Msg_type | Msg_text |
+---------------------+--------+----------+---------------------------------------------------------+
| mysqldemo.employees | repair | note | The storage engine for the table doesn't support repair |
+---------------------+--------+----------+---------------------------------------------------------+
1 row in set (0.00 sec)
修改discounts表的引擎
ALTER TABLE `mysqldemo`.`discounts` ENGINE = MyISAM;