SQL语法——MySQL表维护

本文介绍了MySQL数据库中的关键维护任务,包括查询优化器的工作原理及可能遇到的问题,如何通过ANALYZETABLE更新密钥分布信息以优化查询执行计划。此外,还讲解了如何使用OPTIMIZETABLE进行表碎片整理,以提高数据库性能。同时,CHECKTABLE和REPAIRTABLE语句用于检查和修复表的完整性,确保数据库稳定运行。注意,REPAIRTABLE可能不适用于所有表引擎,如MyISAM之外的引擎。
分析表语句

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; 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值