008.mysql-mysql高水位线问题,删除数据、插入数据索引不连续带来的页内数据空洞,表实际占用空间增大
mysql高水位线问题:
删除数据、
插入数据索引不连续带来的页内数据空洞,表实际占用空间增大
优化:
alter table table_name engine = InnoDB
相当于建立临时表,把表删除后,重新插入数据
原理:
InnoDB引擎只会把这个记录标记为删除,如果要复用,必须要插入相同id的,否则空间不会回收
如果删除的是page页,页的复用没有对id相同的要求
案例:
模拟数据 不断插入删除数据
CREATE TABLE `gaoshuiwei` ( `rid` int(20) NOT NULL AUTO_INCREMENT, `org_name` varchar(255) DEFAULT NULL, `update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`rid`), UNIQUE KEY `org_id` (`rid`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=109592 DEFAULT CHARSET=utf8mb4;
CREATE DEFINER=`root`@`localhost` PROCEDURE `proc_gaoshuiwei`() BEGIN DECLARE i int(4) DEFAULT 0; while i < 10000 do insert into gaoshuiwei( org_name ) select '循环一般在存储过程和存储函数中使用' ; set i = i+1; end while; DELETE from gaoshuiwei where rid %2=1; END
查看表大小
select concat(round(sum(DATA_LENGTH/1024/1024),2),'MB') as data
from information_schema.TABLES
where table_schema='test' and table_name='gaoshuiwei';
清理脏数据后-查看表大小
alter table table_name engine = InnoDB
select concat(round(sum(DATA_LENGTH/1024/1024),2),'MB') as data
from information_schema.TABLES
where table_schema='test' and table_name='gaoshuiwei';
分类:
002.数据库MySQL
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下