MySQL 表维护
简介:在本教程中,我们将向您介绍一些非常有用的语句,这些语句允许您在MySQL中维护数据库表。 MySQL提供了几个有用的语句,允许您有效地维护数据库表。这些语句使您可以分析,优化,检查和修复数据库表。
分析表语句
MySQL查询优化器是MySQL服务器的一个重要组件,它为查询创建最佳查询执行计划。对于特定的查询,查询优化器使用存储的密钥分发等因素来决定在哪些表应当你执行被连接的顺序加入,以及指标应当用于特定的表。 但是,密钥分发有时可能不准确,例如,在表中进行了大量数据更改(包括插入,删除或更新)之后。如果密钥分发不准确,查询优化器可能会选择可能导致严重性能问题的错误查询执行计划。 要解决此问题,可以运行ANALYZE TABLE
表的语句,例如,以下语句分析示例数据库中的payments
表。
ANALYZE TABLE payments;
+--------------------+---------+----------+----------+ | Table | Op | Msg_type | Msg_text | +--------------------+---------+----------+----------+ | mysqldemo.payments | analyze | status | OK | +--------------------+---------+----------+----------+ 1 row in set (0.07 sec)如果自从运行ANALYZE TABLE语句后表没有更改,MySQL将不会再次分析表。如果再次运行上述语句:
ANALYZE TABLE payments;
+--------------------+---------+----------+----------+ | Table | Op | Msg_type | Msg_text | +--------------------+---------+----------+----------+ | mysqldemo.payments | analyze | status | OK | +--------------------+---------+----------+----------+ 1 row in set (0.09 sec)据说表已经是最新的。
优化表语句
在使用数据库时,您会执行许多更改,例如表中的插入,更新和删除数据,这些更改可能会导致表的物理存储碎片化。结果,数据库服务器的性能降低。 MySQL为您提供了一个语句,允许您优化表以避免此碎片整理问题。以下说明了如何优化表:OPTIMIZE TABLE table_name;建议您对经常更新的表执行此语句。例如,如果要优化orders表以对其进行碎片整理,则可以执行以下语句:
OPTIMIZE TABLE orders;
+------------------+----------+----------+-------------------------------------------------------------------+ | Table | Op | Msg_type | Msg_text | +------------------+----------+----------+-------------------------------------------------------------------+ | mysqldemo.orders | optimize | note | Table does not support optimize, doing recreate + analyze instead | | mysqldemo.orders | optimize | status | OK | +------------------+----------+----------+-------------------------------------------------------------------+ 2 rows in set (0.45 sec)
检查表语句
数据库服务器可能发生错误,例如,服务器意外关闭,将数据写入硬盘时出错等。这些情况可能会使数据库运行不正常,在最坏的情况下,它可能会崩溃。 MySQL允许您使用CHECK TABLE
语句检查数据库表的完整性。以下说明了CHECK TABLE
语句的语法:
CHECK TABLE table_name;
CHECK TABLE
语句检查表及其索引。例如,您可以使用CHECK TABLE
语句检查orders
表,如下所示:
CHECK TABLE orders;
+------------------+-------+----------+----------+ | Table | Op | Msg_type | Msg_text | +------------------+-------+----------+----------+ | mysqldemo.orders | check | status | OK | +------------------+-------+----------+----------+ 1 row in set (0.01 sec)
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;在本教程中,您已经学习了一些非常方便的语句来维护MySQL中的数据库表。