
# DWS是否有高效的删除表数据的方法？
有。删除大批量的日志数据时，使用delete语法需要花费更大的时间，此时可以通过TRUNCATE语法进行大批量删除操作，它的删除速度比delete快得多。
详情请参见**[TRUNCATE](https://support.huaweicloud.com/sqlreference-dws/dws_06_0225.html)**。
#### 功能描述
清理表数据，TRUNCATE在清理表数据时，可以快速地从表中删除所有行。它和在目标表上进行无条件的DELETE有同样的效果，由于TRUNCATE不做表扫描，在大表上操作效果更明显，效率会提升很多。
#### 功能特点
- TRUNCATE TABLE在功能上与不带WHERE子句DELETE语句相同：二者均删除表中的全部行。
- TRUNCATE TABLE比DELETE速度快且使用系统和事务日志资源少：
  - DELETE语句每次删除一行，并在事务日志中为所删除每行记录一项。
  
  - TRUNCATE TABLE通过释放存储表数据所用数据页来删除数据，并且只在事务日志中记录页的释放。
   
- TRUNCATE，DELETE，DROP三者的差异如下：
  - TRUNCATE TABLE，删除内容，释放空间，但不删除定义。
  
  - DELETE TABLE，删除内容，不删除定义，不释放空间。
  
  - DROP TABLE，删除内容和定义，释放空间。
   
 
#### 示例
- 创建表。
  ```
  CREATE TABLE tpcds.reason_t1 AS TABLE tpcds.reason;
  ```
  清空表tpcds.reason_t1。
  ```
  TRUNCATE TABLE tpcds.reason_t1;
  ```
  删除表。
  ```
  DROP TABLE tpcds.reason_t1;
  ```
  

- 创建分区表。
  ```
  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;
  ```
  清空13所在的分区p_15。
  ```
  ALTER TABLE tpcds.reason_p TRUNCATE PARTITION for (13);
  ```
  清空分区表。
  ```
  TRUNCATE TABLE tpcds.reason_p;
  ```
  删除表。
  ```
  DROP TABLE tpcds.reason_p;
  ```
  
 
