| 数据库 | truncate实际工作方式 |
|---|---|
| MySQL | MySQL5.7版本,直接释放表数据所占空间(对应.ibd文件的空间),但保留表结构(.frm)和索引结构 |
| Oracle | 创建一张空表,将表的访问地址改为新创建空表的地址,原表还在,标记原表所在空间为“可重用”,物理数据仍存在但逻辑上不可见。可以调整高水位线(HWM)。truncate操作不会释放原表数据所占的磁盘空间。 |
| openguass | 猜测是和MySQL类似,释放表数据所占空间 |
| 神通数据库 | 测试下来和Oracle一致 |
验证:
MySQL
提前在如下表中插入1000条数据
1000条数据下,表占用空间如下
执行truncate表操作之后,表占用空间如下
结论:可以看到,只有.idb文件变小了。直接释放表数据所占空间(对应.ibd文件的空间),但保留表结构(.frm)和索引结构
opengauss
提前在如下表中插入100万条数据
100万条数据下,整个opengauss的data目录占用1.1G
执行truncate表操作之后,整个opengauss的data目录占用1017G
结论:猜测是和MySQL类似,释放表数据所占空间