purge操作有什么作用?

delete和update操作可能并不直接删除原有的数据 。例如,

DELETE FROM t WHERE a=1;

表t上列a有聚集索引, 列b上有辅助索引 。对于上述的delete操作, 仅是将主键列等于1的记录delete flag设 置为1, 记录并没有被删除, 即记录还是存在于B+树中 。 其次, 对辅助索引上a等于1, b等于1的记录同样 没有做任何处理 。 而真正删除这行记录的操作其实被“延时”了, 最终在purge操作中完成。

purge用于最终完成delete和update操作 。 这样设计是因为InnoDB存储引擎支持MVCC, 所以记录不能在事 务提交时立即进行处理 。 这时其他事物可能正在引用这行, 故InnoDB存储引擎需要保存记录之前的版本 。 而是否可以删除该条记录通过purge来进行判断 。若该行记录已不被任何其他事务引用, 那么就可以进行真 正的delete操作 。 可见, purge操作是清理之前的delete和update操作, 将上述操作“最终”完成 。 而实际执行 的操作为delete操作, 清理之前行记录的版本。