是否有高效的删除表数据的方法?
有。删除大批量的日志数据时,使用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
CREATE TABLE tpcds.reason_t1 AS TABLE tpcds.reason;
清空表tpcds.reason_t1。
1
TRUNCATE TABLE tpcds.reason_t1;
删除表。
1
DROP TABLE tpcds.reason_t1;
- 创建分区表。
1 2 3 4 5 6 7 8 9 10 11 12 13
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) );
插入数据。
1
INSERT INTO tpcds.reason_p SELECT * FROM tpcds.reason;
清空分区p_05_before。
1
ALTER TABLE tpcds.reason_p TRUNCATE PARTITION p_05_before;
清空分区p_15。
1
ALTER TABLE tpcds.reason_p TRUNCATE PARTITION for (13);
清空分区表。
1
TRUNCATE TABLE tpcds.reason_p;
删除表。
1
DROP TABLE tpcds.reason_p;
数据库使用 所有常见问题
- 如何调整分布列?
- 如何查看和设置数据库的字符集编码格式
- 如何处理建表时date类型字段自动转换为timestamp类型的问题?
- 是否需要定时对常用的表做VACUUM FULL和ANALYZE操作?
- GaussDB(DWS)数据库设置主键后还需要设置分布键吗?
- GaussDB(DWS)是否兼容PostgreSQL的存储过程?
- 如何理解分区表、数据分区和分区键?
- 如何导出某张表结构?
- 是否有高效的删除表数据的方法?
- 如何查看外部表信息?
- 如果建表时没有指定分布列,数据会怎么存储?
- 如何将联结查询的null结果替换成0?
- 如何查看表是行存还是列存?
- GaussDB(DWS)列存表的常用信息查询
- GaussDB(DWS)查询时索引失效场景解析
- 如何使用自定义函数改写CRC32()函数
- 以pg_toast_temp*或pg_temp*开头的Schema是什么?
- GaussDB(DWS)查询时结果不一致的常见场景和解决方法
- 哪些系统表不能做VACUUM FULL
- 语句处于idle in transaction状态常见场景
- GaussDB(DWS)如何实现行转列及列转行?
- 唯一约束和唯一索引有什么区别?
- 函数和存储过程有什么区别?
- 字符截取函数substrb()、substr()及substring()的用法及差异
more