见下图中的红框部分
简单的说,mysql 的伎俩:以空间换时间。
------ 2015年12月2日09:02:09 更新 ------------
由于我没有深入研究过 MySQL 源码,以下内容纯属猜测。
如果是 innodb 表,那么请看这个帖子 http://segmentfault.com/q/1010000000094534
我看了你的截图,表都是 MyISAM 的。在第一次插入数据的时候,数据都是连续存储的(物理存储)。当 MySQL 删除数据的时候,就会产生很多不连续的空白空间。
而当插入数据时,会有很多的策略来使用这些空白空间。我们假设其中的一种是“最旧最匹配策略”:
如果插入的数据比2大,但是比1小,那么我们就可以把他插入到1的位置。但是由于新插入的空间比1小,所以1的空间还是有剩余。
MySQL 可以防止这些碎片吗?当然可以。在删除或者插入的时候,可以把后面的所有空间前移,这样就不会产生碎片了。但是,如果表里有10万条记录,我们删除了第100条,那么我们几乎要移动所有的空间,这样就产生了非常大的IO操作。
不仅仅是 MySQL,就连 Windows 都需要定期的清理磁盘碎片。
你可以再温习一下《操作系统》课程的相关知识。
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
暂无简介
文章 0 评论 0
接受
发布评论
评论(1)
简单的说,mysql 的伎俩:以空间换时间。
------ 2015年12月2日09:02:09 更新 ------------
由于我没有深入研究过 MySQL 源码,以下内容纯属猜测。
如果是 innodb 表,那么请看这个帖子 http://segmentfault.com/q/1010000000094534
我看了你的截图,表都是 MyISAM 的。在第一次插入数据的时候,数据都是连续存储的(物理存储)。当 MySQL 删除数据的时候,就会产生很多不连续的空白空间。
而当插入数据时,会有很多的策略来使用这些空白空间。我们假设其中的一种是“最旧最匹配策略”:
如果插入的数据比2大,但是比1小,那么我们就可以把他插入到1的位置。但是由于新插入的空间比1小,所以1的空间还是有剩余。
MySQL 可以防止这些碎片吗?当然可以。在删除或者插入的时候,可以把后面的所有空间前移,这样就不会产生碎片了。但是,如果表里有10万条记录,我们删除了第100条,那么我们几乎要移动所有的空间,这样就产生了非常大的IO操作。
不仅仅是 MySQL,就连 Windows 都需要定期的清理磁盘碎片。
你可以再温习一下《操作系统》课程的相关知识。