mysql数据空洞
表空洞是什么
当你对InnoDB进⾏修改操作时,例如删除⼀些⾏,这些⾏只是被标记为“已删除”,⽽不是真的从索引中物理删除了,因⽽空间也没有真的被释放回收。
InnoDB的Purge线程会异步的来清理这些没⽤的索引键和⾏,但是依然没有把这些释放出来的空间还给操作系统重新使⽤,因⽽会导致页⾯中存在很多空洞。
如果表结构中包含动态长度字段,那么这些空洞甚⾄可能不能被InnoDB重新⽤来存新的⾏,因为空间空间长度不⾜。
泉南
有些⽤户可能会使⽤ OPTIMIZE TABLE 或者 ALTER TABLE <table> ENGINE=InnoDB 来重建这些表,但是这样会导致表的拷贝,如果临时空间不⾜甚⾄不⾜以进⾏⼀次 OPTIMIZE TABLE 操作。并且如果你⽤的是共享表空间⽅式,OPTIMIZE TABLE 会导致你的共享表空间⽂件持续增⼤,因为整理的索引和数据都追加在数据⽂件的末尾。
潋怎么读InnoDB类型的表是⽆法使⽤optimize table命令知彼解己
有什么影响
青函隧道1. 删除数据时,空间并没有变⼩,面板堆石坝
2. mysql对数据库扫描时,扫描的对象实际是列表的容量上限,会降低扫描效率
教育是慢的艺术
如何查看表空洞⼤⼩
代码块
sql
SELECT DATA_LENGTH,DATA_FREE from information_schema.tables where table_schema='test' and table_name='t1';
DATA_FREE表⽰表中空闲数据块的⼤⼩。
八年级下册生物如何清理空洞(效率慢,谨慎使⽤)
1. myisam 可以使⽤ optimize table table_name 命令进⾏碎⽚整理,去除空洞,会锁表(innodb⽆法使⽤optimize)
2. 使⽤ alter table table_name engine=innodb ,可以释放空洞,这是由于在转换数据引擎(即使没有
正红色口红
真正转换)的时候,会将表中的所有数据读取,再重新写⼊,这个过程中,会释放空洞(效率慢)