更新时间:2022-08-16 GMT+08:00
是否有高效的删除表数据的方法?
有。删除大批量的日志数据时,使用delete语法需要花费更大的时间,此时可以通过truncate语法进行大批量删除操作,它的删除速度比delete快得多。
详情请参见《数据仓库服务开发指南》的“TRUNCATE”章节。
功能描述
清理表数据,TRUNCATE快速地从表中删除所有行。
它和在目标表上进行无条件的DELETE有同样的效果,但由于TRUNCATE不做表扫描,因而快得多。在大表上操作效果更明显。
功能特点
- TRUNCATE TABLE在功能上与不带WHERE子句DELETE语句相同:二者均删除表中的全部行。
- TRUNCATE TABLE比DELETE速度快且使用系统和事务日志资源少:
- DELETE语句每次删除一行,并在事务日志中为所删除每行记录一项。
- TRUNCATE TABLE通过释放存储表数据所用数据页来删除数据,并且只在事务日志中记录页的释放。
- TRUNCATE,DELETE,DROP三者的差异如下:
- TRUNCATE TABLE,删除内容,释放空间,但不删除定义。
- DELETE TABLE,删除内容,不删除定义,不释放空间。
- DROP TABLE,删除内容和定义,释放空间。
示例
1 2 3 4 5 |
--创建表。CREATE TABLE tpcds.reason_t1 AS TABLE tpcds.reason;
--清空表tpcds.reason_t1。TRUNCATE TABLE tpcds.reason_t1;
--删除表。DROP TABLE tpcds.reason_t1;
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
--创建分区表。
CREATE TABLE tpcds.reason_p
(
r_reason_sk integer,
r_reason_id character(16),
r_reason_desc character(100)
)PARTITION BY RANGE (r_reason_sk)
(
partition p_05_before values less than (05),
partition p_15 values less than (15),
partition p_25 values less than (25),
partition p_35 values less than (35),
partition p_45_after values less than (MAXVALUE)
);
--插入数据。
INSERT INTO tpcds.reason_p SELECT * FROM tpcds.reason;
--清空分区p_05_before。
ALTER TABLE tpcds.reason_p TRUNCATE PARTITION p_05_before;
--清空分区p_15。
ALTER TABLE tpcds.reason_p TRUNCATE PARTITION for (13);
--清空分区表。
TRUNCATE TABLE tpcds.reason_p;
--删除表。
DROP TABLE tpcds.reason_p;
|
父主题: 数据库使用