Mysql中删除数据造成的碎片如何修复

Mysql中删除数据造成的碎片如何修复,第1张

我们都知道,在mysql (这里只探讨innodb) 中delete数据,并非真实删除,而是在这行数据上打了一个del的标记,所以这行占用的空间也并不会释放,但是空间可以被复用,所以期望用delete数据来释放空间的同学可以醒醒了。这样就造成了空间上的碎片,那么如果干掉这些碎片呢。

这里先说结论,alter table语句可以触发表重建,消除碎片空间。

mysql中的数据存储结构大概是下面这个样子的

而delete掉的标记会记录在头信息中。

做个实验,看看空间是否真的没有释放;

创建一张表user,并插入很多数据

查看表的文件大小

再随便插入几条

ok这里看到文件大小增加了16k,这是因为mysql的一页就是16k,所以文件大小是16k、16k的增长的。

这时候我们删除大量的数据再次查看文件大小,仍然是272k,索命,数据虽然删除,但是空间没有释放。

这里我们对主键执行一个alter table语句

再次查看文件大小

ok 文件大小明显的减少,这里说明主键的alter语句会重建表,并且释放碎片空间;

这时候我们再删除大量的数据再次查看文件大小,这里我们对普通列执行一个alter table语句

再次查看文件大小

ok 文件大小明显的减少,这里说明普通列的alter语句会重建表,并且释放碎片空间;

mysql打开视图显示lackrights的解决方法:从MySQL的information_schema中的视图表View中,用下面的语句修复视图,如:selectVIEW_DEFINITIONfrominformation_schema,viewswhereTABLE_SCHEMA等于databaseandTABLE_NAME等于view


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/8576023.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-18
下一篇2023-04-18

发表评论

登录后才能评论

评论列表(0条)

    保存