当前位置:首页 >  站长 >  数据库 >  正文

表越删越慢?OPTIMIZE TABLE回收空间实录

 2026-08-27 17:15  来源: 互联网   我来投稿 撤稿纠错

  一键部署OpenClaw

日志表每天删几十万行,文件却一点没变小,查询还越来越慢。这不是玄学,是InnoDB的机制:删除的数据只是打标记,空间留在文件里复用,但反复增删后数据页变得稀碎,扫描效率下降。碎到一定程度就得整理。

先看碎片率再动手,information_schema里直接查。

SELECT table_name,
ROUND(data_length/1024/1024, 1) AS data_mb,
ROUND(index_length/1024/1024, 1) AS index_mb,
ROUND(data_free/1024/1024, 1) AS free_mb
FROM information_schema.tables
WHERE table_schema = 'your_db'
ORDER BY data_free DESC;

free_mb占比高的表值得整理。OPTIMIZE TABLE会重建表文件、压实数据页、重建索引统计信息,一举三得。

OPTIMIZE TABLE log_records;
-- 返回 Table does not support optimize... use recreate+analyze 属正常提示
-- InnoDB下它内部等价于 ALTER TABLE ... FORCE 重建

# 大表整理会锁写,挑业务低峰执行
# 或者用在线DDL减少阻塞时间
ALTER TABLE log_records ENGINE=InnoDB, ALGORITHM=INPLACE, LOCK=NONE;

注意成本:重建期间该表写入受限,几GB的表要跑几分钟,务必挑低峰。更聪明的路子是把删改为归档——历史数据定期导出到归档表再truncate,主表永远保持苗条,比定期做碎片整理治标又治本。

验证看两处:data_free归零或大幅下降,information_schema里表文件大小更新;对应查询的EXPLAIN里rows预估变准。碎片整理不是日常操作,一个季度看一次数据就够了,天天optimize纯属自我感动。

申请创业报道,分享创业好点子。点击此处,共同探讨创业新机遇!

相关标签
mysql

相关文章

  • 网站突然连不上数据库?SHOW PROCESSLIST排查实录

    页面集体报数据库连接失败,重启MySQL能救急,但过几小时又犯。这种病根基本是连接堆积:请求速度超过消化速度,连接数堆到max_connections上限,新连接全被拒。排查工具就是一条SQL。SHOWPROCESSLIST;--输出关键列:Id、User、Host、db、Command、Time、

    标签:
    mysql
  • MySQL索引为什么不生效:六个写法让EXPLAIN当场现形

    明明建了索引,查询还是全表扫描,几百万行的表一查十几秒。索引失效多数不是索引的问题,是SQL写法的问题。别猜,EXPLAIN一下,type列是不是ALL、key列是不是NULL,一目了然。EXPLAINSELECT*FROMordersWHEREDATE(create_time)='2026-08-

    标签:
    mysql
  • 网站数据自动备份:一个脚本+一个计划任务搞定

    网站备份是出事之后最后悔没做的东西。很多人服务器被黑后才发现数据库没备份,几年的内容一夜归零。其实一个shell脚本加一个定时任务就能解决。下面这个脚本同时备份MySQL数据库和网站源码,按日期命名,保留最近7天。Linux服务器直接放到/root/backup.sh,Windows可以改成Powe

    标签:
    数据备份
    mysql
  • MySQL慢查询定位三板斧:慢日志+EXPLAIN+索引

    网站卡顿不一定是代码慢,很可能是数据库在硬扛。MySQL慢查询日志是最直接的突破口,先把执行时间长的SQL抓出来,再一条条用EXPLAIN看执行计划,最后加索引或者改写法。开启慢日志很简单,在my.cnf里加三行,重启MySQL即可。注意long_query_time单位是秒,线上可以先设1秒,抓到

    标签:
    mysql
    网站优化
  • MySQL5.7 集群配置的步骤

    这篇文章主要介绍了MySQL5.7集群配置的步骤,帮助大家更好的理解和学习使用MySQL,感兴趣的朋友可以了解下

    标签:
    mysql

热门排行

信息推荐