14.9.4 Defragmenting a Table 整理表

14.9.4 Defragmenting a Table   整理表

随机的插入或者从一个 secondary index 删除会导致index变的 破碎。


碎片意味着 index pages物理的顺序在磁盘上和记录在pages里的index 顺序不接近,


或者有很多的没有使用的Pgaes 在64-page blocks 分配给索引


碎片化的征兆是 一个表占据更多的空间 相比它应该占用的大小, 究竟是多少,


是很难确定的。所有的InnoDB 数据和Indexes 是存储在B-trees,它们的填充因子可能从50%到100%


另外一个碎片的征兆是一个表扫描 花费更长的时间。


SELECT COUNT(*) FROM t WHERE non_indexed_column <> 12345;


前面的查询需要MySQL 执行一个全表扫描, 对于一个大表最慢的查询方式


为了加快所有扫描,你可以周期性的执行一个 "null" ALTET TABLE操作,

会让MySQL 重建表:

ALTER TABLE tbl_name ENGINE=INNODB


在MySQL 5.6.3,你可以使用 ALTER TABLE tbl_name FORCE来执行一个"null" alter 操作来重建表,

先前的FORCE 选项是有效的但是可以忽略


在MySQL 5.6.17,ALTER TABLE  tbl_name ENGINE=INNODB 和 ALTER TABLE  tbl_name FORCE 


使用online DDL(ALGORITHM=COPY).


另一种方式执行一个碎片操作是使用mysqldump 来dump 表到文件,删除表,重新从备份加载。




如果插入到一个index总是向上的 记录总是在最后端删除,InnoDB 文件管理算法强制 碎片在索引上不发生。












  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

scan724

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值