1.delete操作会生成插入相同记录的记录复用和page复用
2.delete会产生page空洞,随机insert也会产生page空洞(页分裂),索引update分解为delete和insert也会产生空洞
3.重建表可以使数据在page上更紧凑
4.alter table tb_name engine=innodb 在非online ddl 时server层生成临时表且mdl写锁,阻塞其他会话dml操作,锁阻塞时间久。在online ddl时,时innodb引擎操作步骤:
a.扫描表页,获取表的dml读锁;
b.将表页复制到一个临时文件,以b+树格式存储;
c.在扫描和复制page的过程生成row.log日志记录ddl复制过程的dml操作;
d.将row.log操作日志应用到临时文件;
e.获取dml的写锁,临时文件与表文件替换
5.ddl online时,innodb表加全文索引时,会阻塞dml操作,其实效果与非online ddl一样的。ddl online一定是inplace;inplace 的ddl不一定是online,例如:添加fulltext索引和spatial索引
6.optimize table 重建表及索引,收集统计信息
alter table tb engine=innodb 重建表其实也收集统计信息
analyze table tb 重新收集统计信息