|
爱科技、爱创意、爱折腾、爱极致,我们都是技术控
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 不长叶子的树 于 2023-12-11 18:35 编辑
如果我们 删除了很多数据,或者在插入数据时,不是按照主键的递增顺序插入的,很可能会因此产生很多内存碎片,影响数据查询的效率。这是因为在删除数据时,MySQL 并不会立即将它们清除并整理空间,而是将它们标记为删除,通过 OPTIMIZE TABLE 可以将空间进行整理,优化,减少内存碎片。
InnoDB 引擎并不支持 OPTIMIZE TABLE 操作,它会提示如下信息:
- OPTIMIZE TABLE xxxx_table;
复制代码 -- Table does not support optimize, doing recreate + analyze instead
我们可以通过不做任何操作的 ALTER 命令来重建表达到以上目的:
- alter table xxxx_table engine=InnoDB;
复制代码
执行完成后,我们通过如下 SQL 查看执行情况,如果 data_free 列为 0,说明我们空间碎片整理成功
- show table status from xxxx_db like xxxx_table;
复制代码
不过,多数情况下不需要执行该操作。
找到并修复损坏的表
可能因硬件问题、MySQL 本身的缺陷或者操作系统的问题导致索引损坏,当然这种问题非常少见,我们可以通过如下 SQL 来检查大多数表和索引的错误:
check table xxxx_table;
如果发现异常的话,可以通过如下 SQL 进行修复:
-- 如果存储引擎不支持上述操作的话,也可通过表重建来完成
- alter table xxxx_table engine=InnoDB;
复制代码
|
|