分区表执行 TRUNCATE PARTITION 操作,以下描述正确的是?()
A. 逐条删除分区内所有数据,生成大量 CLOG
B. 直接回收分区存储空间,速度极快
C. 会同步删除表的分区定义,无法复用该分区
D. 执行期间阻塞整张表所有读写操作
3 个赞
正确答案是 B. 直接回收分区存储空间,速度极快。
逐项分析
A. 逐条删除分区内所有数据,生成大量 CLOG —
错误
TRUNCATE PARTITION 是 DDL 操作,不是 DML 操作。它直接释放分区对应的数据页和元数据,不走逐行删除逻辑,因此不会产生大量事务日志(CLOG)。与之对比,DELETE FROM table PARTITION(p0) 才是逐行删除并生成大量 CLOG 的方式。
B. 直接回收分区存储空间,速度极快 —
正确
TRUNCATE PARTITION 本质上是一个仅涉及元数据的操作,直接释放分区的数据页并重置相关结构,即使分区中包含数亿行数据,也能在毫秒到秒级完成,I/O、CPU 和内存开销极小。
C. 会同步删除表的分区定义,无法复用该分区 —
错误
TRUNCATE PARTITION 只清空分区内的数据,分区定义(结构)完整保留,分区仍然可以继续接收新数据的写入。如果要删除分区定义,应该使用 DROP PARTITION。
D. 执行期间阻塞整张表所有读写操作 —
错误
TRUNCATE PARTITION 的锁粒度是分区级别,只对目标分区加锁,其他分区的读写操作基本不受影响。只有访问被 TRUNCATE 的那个分区的 DML 语句才会被短暂阻塞,待操作完成后即可继续执行。
1 个赞