PostgreSQL TRUNCATE TABLE 清空表
在本文中,我们介绍了在 PostgreSQL 服务器上如何使用 TRUNCATE TABLE 语句清空一个或多个表。
当我们需要清空一个表中的所有行时,除了使用 DELETE * FROM table 还可以使用 TRUNCATE TABLE 语句。
TRUNCATE 语句和不带任何条件的 DELETE 语句的效果相同。但是 TRUNCATE 速度更快,因为它不扫描表。并且,TRUNCATE 会立即回收磁盘空间。 TRUNCATE 在清空大表时很有用。
PostgreSQL TRUNCATE 语法
要清空一个或者多个表中的所有的行,请按照以下语法使用使用 TRUNCATE 语句:
TRUNCATE [TABLE] [ONLY] table_name [ * ] [, ... ]
[RESTART IDENTITY | CONTINUE IDENTITY] [ CASCADE | RESTRICT ]
解释说明:
TABLE关键字是可选的。ONLY关键字是可选的。如果在表名前指定了ONLY,则只清空此表,不包含它的子表。否则,此表和它的子表都将被清空。table_name是要清空的表的名字。 表名后的*明确的指示子表也将被清空。- 您可以在一个
TRUNCATE语句中清空多个表。 多个表名使用逗号分隔。 RESTART IDENTITY选项指示自动重置表中的列拥有的序列。CONTINUE IDENTITY选项指示不改变表中的序列的值,它是默认的。CASCADE选项指示同时清空那些通过外键引用table_name的表。RESTRICT选项指示如果有外键引用要清空的表,则拒绝操作。
PostgreSQL TRUNCATE 实例
我们通过以下实例比较 TRUNCATE 和 DELETE 在清空一个表的效率。
首先,我们使用下面的语句创建一个 test_truncate 表用于测试:
CREATE TABLE test_truncate (
v INTEGER
);
然后,使用下面的 sql 语句插入 1000 万条数据:
INSERT INTO test_truncate (v)
SELECT generate_series(1, 10000000) v;
为了观察查询语句消耗的时间,请先使用下面的命令打开计时:
\timing
通过以下 DELETE 语句删除表中的所有行:
DELETE FROM test_truncate;
DELETE 10000000
Time: 6566.458 ms (00:06.566)上面是 DELETE 语句的返回结果。它显示了从表中删除 10000000 行,总共耗费 6566.458 毫秒。
再使用上面的 INSERT 语句重新插入 1000 万行后,通过以下 TRUNCATE TABLE 语句清空表:
TRUNCATE TABLE test_truncate;
TRUNCATE TABLE
Time: 31.785 ms上面是 TRUNCATE TABLE 语句的返回结果。它显示了清空此表共耗费 31.785 毫秒。所以 TRUNCATE 比 DELETE 快的多。
结论
在本文中,我们介绍了在 PostgreSQL 中如何使用 TRUNCATE TABLE 语句清空表。 TRUNCATE TABLE 比 DELETE 速度快的多,它对于清空一个大表很有用。