MySQL存在一些非常有用的语句,这些语句能很好的维护MySQL中数据库表。这些语句可以分析,优化,检查和修复数据库表。
1、分析表语句
MySQL查询优化器是MySQL服务器的一个重要组件,它为查询创建最佳查询执行计划。对于特定的查询,查询优化器使用存储的密钥分发等因素来决定在哪些表应当你执行被连接的顺序加入,以及指标应当用于特定的表。
但是,密钥分发有时可能不准确,例如,在表中进行了大量数据更改(包括插入,删除或更新)之后。如果密钥分发不准确,查询优化器可能会选择可能导致严重性能问题的错误查询执行计划。
要解决此问题,可以运行ANALYZE TABLE表的语句,例如,以下语句分析示例数据库中的payments表。
mysql> analyze table student;
+-------------+---------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+-------------+---------+----------+----------+
| stu.student | analyze | status | OK |
+-------------+---------+----------+----------+
1 row in set (0.01 sec)
2.优化表语句
在使用数据库时,您会执行许多更改,例如表中的插入,更新和删除数据,这些更改可能会导致表的物理存储碎片化。结果,数据库服务器的性能降低。
MySQL提供了一个语句,允许优化表以避免此碎片整理问题。以下说明了如何优化表:
OPTIMIZE TABLE table_name;
实例:如果要优化student表以对其进行碎片整理
mysql> optimize table student;
+-------------+----------+----------+-------------------------------------------------------------------+
| Table | Op | Msg_type | Msg_text |
+-------------+----------+----------+-------------------------------------------------------------------+
| stu.student | optimize | note | Table does not support optimize, doing recreate + analyze instead |
| stu.student | optimize | status | OK |
+-------------+----------+----------+-------------------------------------------------------------------+
2 rows in set (0.06 sec)
3.检查表语句
数据库服务器可能发生错误,例如,服务器意外关闭,将数据写入硬盘时出错等。这些情况可能会使数据库运行不正常,在最坏的情况下,它可能会崩溃。
MySQL允许使用CHECK TABLE语句检查数据库表的完整性。以下说明了CHECK TABLE语句的语法:
CHECK TABLE table_name;
实例:检查student表
mysql> check table student;
+-------------+-------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+-------------+-------+----------+----------+
| stu.student | check | status | OK |
+-------------+-------+----------+----------+
1 row in set (0.00 sec)
CHECK TABLE语句仅检测数据库表中的问题,但不会修复它们。要修复表,请使用REPAIR TABLE语句。
4.修复表语句
REPAIR TABLE语句允许您修复数据库表中发生的一些错误。MySQL不保证REPAIR TABLE语句可以修复表可能具有的所有错误。
语法格式:REPAIR TABLE table_name;
修复student表存在的错误:
mysql> repair table student;
+---------------------+--------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+---------------------+--------+----------+----------+
| stu.tudent | repair | status | OK |
+---------------------+--------+----------+----------+
1 row in set (0.01 sec)
如果表的引擎不是 MyISAM是不支持 REPAIR修复
mysql> repair table student;
+-------------+--------+----------+---------------------------------------------------------+
| Table | Op | Msg_type | Msg_text |
+-------------+--------+----------+---------------------------------------------------------+
| stu.student | repair | note | The storage engine for the table doesn't support repair |
+-------------+--------+----------+---------------------------------------------------------+
1 row in set (0.01 sec)
修改discounts表的引擎
ALTER TABLE `student`.`discounts` ENGINE = MyISAM;
MySQL数据库学习(10)
最新推荐文章于 2024-08-03 19:27:22 发布