维护数据库表

在本教程中,我们将向您介绍一些非常有用的语句,使您可以在MySQL中维护数据库表。

MySQL提供了几个有用的语句,可以有效地维护数据库表。 这些语句使您能够分析,优化,检查和修复数据库表。

分析表语句

MySQL查询优化器是MySQL服务器的重要组成部分,为查询创建了一个最佳的查询执行计划。 对于特定查询,查询优化器使用存储的密钥分发和其他因素来决定在执行连接时应将表进行连接的顺序,以及哪个索引应用于特定表。

然而,密钥分发可能有时不准确,例如,在表中进行了大量数据更改(包括插入删除更新)之后。如果密钥分发不准确,则查询优化器可能会选择可能导致严重性能问题的错误查询执行计划。

要解决此问题,您可以为该表运行ANALYZE TABLE语句,例如,以下语句分析示例数据库(yiibaidb)中的payments表。如下所示 -

mysql> ANALYZE TABLE payments;
+-------------------+---------+----------+----------+
| Table             | Op      | Msg_type | Msg_text |
+-------------------+---------+----------+----------+
| yiibaidb.payments | analyze | status   | OK       |
+-------------------+---------+----------+----------+
1 row in set

如果运行ANALYZE TABLE语句后表没有变化,MySQL将不会再次分析表。 如果再次运行上述语句:

mysql> ANALYZE TABLE payments;
+-------------------+---------+----------+----------+
| Table             | Op      | Msg_type | Msg_text |
+-------------------+---------+----------+----------+
| yiibaidb.payments | analyze | status   | OK       |
+-------------------+---------+----------+----------+
1 row in set

当前表已经是最新的状态了。

优化表语句

在使用数据库时,可以进行许多更改,如插入删除更新表中的数据,这可能会导致表的物理存储碎片化。因此,数据库服务器的性能下降。

MySQL提供了一个语句,允许您优化表以避免此碎片整理问题。 以下说明如何优化表:

OPTIMIZE TABLE table_name;

建议您对经常更新的表执行此语句。例如,如果要优化orders表进行碎片整理,可以执行以下语句:

mysql> OPTIMIZE TABLE orders;
+-----------------+----------+----------+-------------------------------------------------------------------+
| Table           | Op       | Msg_type | Msg_text                                                          |
+-----------------+----------+----------+-------------------------------------------------------------------+
| yiibaidb.orders | optimize | note     | Table does not support optimize, doing recreate + analyze instead |
| yiibaidb.orders | optimize | status   | OK                                                                |
+-----------------+----------+----------+-------------------------------------------------------------------+
2 rows in set

检查表语句

数据库服务器可能会发生错误,例如,服务器意外关闭,将数据写入硬盘时出错,等等。这些情况可能导致数据库运行不正确,并且在最坏的情况下可能会崩溃。

MySQL允许您使用CHECK TABLE语句检查数据库表的完整性。以下说明CHECK TABLE语句的语法:

CHECK TABLE table_name;

CHECK TABLE语句检查表及其索引。 例如,可以使用CHECK TABLE语句来检查订单表,如下所示:

CHECK TABLE orders;

执行上面语句,结果如下 -

mysql> CHECK TABLE orders;
+-----------------+-------+----------+----------+
| Table           | Op    | Msg_type | Msg_text |
+-----------------+-------+----------+----------+
| yiibaidb.orders | check | status   | OK       |
+-----------------+-------+----------+----------+
1 row in set

CHECK TABLE语句仅检测数据库表中的问题,但不会修复它们。要修复表,请使用REPAIR TABLE语句。

修复表语句

REPAIR TABLE语句允许您修复数据库表中发生的一些错误。 MySQL不保证REPAIR TABLE语句可以修复表所有可能的错误。

以下是EPAIR TABLE语句的语法:

REPAIR TABLE table_name;

假设orders表中有一些错误,需要修复它们,可以使用REPAIR TABLE语句,如下查询所示:

REPAIR TABLE employees;

MySQL返回表中所做的内容,并显示表是否已修复。

注: REPAIR TABLE方法仅适用于MyISAMARCHIVECSV表。

在本教程中,您已经学到了一些非常方便的语句来维护MySQL中的数据库表。

Last updated