前言
truncate 是一个我们也经常会使用到的命令
其作用类似于 delete from $table;
但是 他会比 delete 块很多,这里我们来看一下 它的实现
delete 的时候会逐行进行处理, 打上 删除标记, 然后 由后台任务 进行数据处理
truncate table 的实现
执行 sql 如下 “truncate table tz_test_big_table_copy;”
这里的主要的流程是 一系列的校验, 生成新的newTableId, 删除索引, 重新创建索引, 关联 newTableId 和已有的元数据信息, truncate idb 文件 等等
我们这里 主要是 查看一下 这些关键的流程
新建一个 table_id, 以及其关联到 index, space 等等
清理 待删除 数据表的相关索引
重置 fspHeader 的相关内容
重新创建 tz_test_02 的相关索引
更新 information_schema 中的相关元数据信息
truncate 数据表 tz_test_big_table_copy 的 idb 文件, 仅仅保留 114688 字节
information_schema 中相关元数据信息如下
select * from INNODB_SYS_TABLES where TABLE_ID = 32;
select * from INNODB_SYS_INDEXES where TABLE_ID = 32;
select * from INNODB_SYS_COLUMNS where TABLE_ID = 32;
select * from INNODB_SYS_VIRTUAL where TABLE_ID = 32;
完