`

delete与truncate的区别

阅读更多
在我带的某个Project中,在开发阶段需要Reload相同的Data到Oracle中来进行测试,因此需要不断的删除数据,简单的Delete操作似乎就OK了,但其实不然。我们到知道建表的时候需要Tablespace,Data有Data的Tablespace,Index有Index的Tablespace,而Oracle自身的Log,Archive也有自己的Tablespace,简单的Delete操作,能够回收Data的Tablespace,但是不能回收其他的Tablespace,从而会导致一路跑下来,虽然都是对同样的Data做Reload,但总有一天会弄爆Oracle的Tablespace,出现ORA-01654错误。

那么一个小技巧就是用Truncate来代替Delete,使用Truncate Table来删除所有行,比用Delete来删除有不少的好处:

1. Truncate Table语句是一种相对快速,无Log记录的方法,它等同于不含Where子句的Delete语句,至少表面上看来功能上相同,但Truncate Table的速度更快,并且使用更少的System Resource和Transaction Log Resource。

2. Truncate语句所使用的Log Tablespace较少。Delete语句每删除一行Record,都需要在Log中为每一个所删除的行进行记录,但是Truncate是通过释放用于Store Data的数据Page来删除数据,在LOong中只需要记录Page释放。

3. Truncate语句所使用的Lock较少。Delete语句始终锁定Table中的各行,而Truncate始终锁定Table本身和Page本身,不是Table中的各行。

4. Truncate语句通常不会在所删除的Table中留有空页。Delete语句执行后,Table中仍然会保留空页,而且必须至少使用一个排他表锁,LCK_M_X,才能释放堆中的空表,否则执行完Delete操作后,表或堆中会包含相当多的空页或空表,而且对于Index,Delete操作同样会留下一些空页。而Truncate操作后,只是会在DB而不是Table中保留一些相关的信息。
分享到:
评论
1 楼 yulongxiang 2010-11-22  
 

相关推荐

    delete,truncate和drop的区别

    ### delete,truncate和drop的区别详解 #### 一、概述 在数据库管理中,经常会遇到需要删除数据或表的情况。为了确保数据的准确性和安全性,理解`delete`、`truncate`和`drop`这三个命令的区别至关重要。本文将详细...

    9.1.3 drop,delete与truncate的区别.md

    9.1.3 drop,delete与truncate的区别

    TRUNCATE与 DELETE区别

    在数据库管理中,TRUNCATE 和 DELETE 是两种用于删除数据的方法,它们各有其特定的适用场景和优缺点。本文将详细对比分析这两种操作的区别。 首先,TRUNCATE TABLE 是一种快速删除表中所有数据的方式,它并不记录每...

    说一说drop、delete与truncate的区别

    drop、delete、truncate都表示删除,但是三者有一些差别: Delete用来删除表的全部或者一部分数据行,执行delete之后,用户需要提交(commmit)或者回滚(rollback)来执行删除或者撤销删除。会触发这个表上所有的...

    sql中 truncate 和 delete 有什么区别

    "SQL中truncate和delete的区别" SQL中truncate和delete是两种不同的数据删除方式,它们之间存在许多关键的区别。本文将详细阐述truncate和delete的不同之处,以便读者更好地理解和选择这两种删除方式。 -delete的...

    truncate,delete以及drop区别汇总

    ### truncate, delete 以及 drop 区别汇总 #### 一、概述 在数据库管理中,经常需要对数据表进行各种操作,比如删除表中的数据、删除整个表等。`truncate`, `delete` 和 `drop` 是三种常见的 SQL 命令,它们在功能...

    sql之truncate、delete与drop区别

    与 `TRUNCATE` 不同,`DELETE` 操作会记录在事务日志中,因此可以被回滚,支持数据恢复。此外,`DELETE` 会触发表上的触发器和检查约束,这可能会对性能产生影响,尤其是在处理大量数据时。 `DROP` 语句则是用来...

    sql之truncate_、delete与drop区别.pdf

    ### SQL之TRUNCATE、DELETE与DROP的区别 #### 概述 在SQL中,`TRUNCATE`、`DELETE`和`DROP`都是用于管理数据库表的重要命令,但它们之间存在显著的区别。本文将深入探讨这三种命令的功能、用法及其应用场景。 ####...

    MySQL删除表操作实现(delete、truncate、drop的区别)

    本文主要讲mysql中三种删除表的操作,delete语句、truncate语句以及drop语句的区别: 简介 delete 1、删除整张表的数据: delete from table_name; 2、删除部分数据,添加where子句: delete from table_name ...

    详解SQL中drop、delete和truncate的异同

    总结来说,`DROP`、`DELETE`和`TRUNCATE`在处理数据时各有其特定的应用场景和限制,理解它们之间的区别对于有效地管理数据库至关重要。在进行数据清理时,根据具体需求选择合适的方法,同时确保数据的安全性和可恢复...

    MySQL—delete和truncate的区别

    在MySQL数据库管理中,删除数据的操作主要有两种方式:`DELETE` 和 `TRUNCATE`。它们虽然都能实现数据的删除,但在使用场景、性能和效果上有着显著的区别。以下是关于这两种操作的详细解释: 1. **`DELETE` 命令** ...

    drop,truncate与delete的区别

    注意:这里说的delete是指不带where子句的delete语句 相同点 truncate和不带where子句的delete, 以及drop都会删除表内的数据 不同点: 1. truncate和 delete只删除数据不删除表的结构(定义) drop语句将删除表的结构被...

    delete、truncate、drop的区别以及该如何选择

    前言 上周同事小姐姐问我:“哈哥你看,我发现...咱们常用的三种删除方式:通过 delete、truncate、drop 关键字进行删除;这三种都可以用来删除数据,但场景不同。 一、从执行速度上来说 drop > truncate >> DELETE 二

    MySQL删除数据Delete与Truncate语句使用比较

    - 效率方面,`TRUNCATE`通常比`DELETE`快,因为它不需要记录每行的删除操作,也不触发任何与删除相关的触发器。 - 日志记录,`DELETE`操作会被记录在事务日志中,对于可恢复性有保障,而`TRUNCATE`则不记录,这...

    mysql 删除操作(delete+TRUNCATE)

    3. 区别与选择: - DELETE可以有条件地删除数据,而TRUNCATE总是删除全部数据。 - DELETE支持事务和回滚,TRUNCATE不支持。 - DELETE支持LIMIT和ORDER BY,TRUNCATE不支持。 - DELETE在删除大量数据时,如果有...

    oracle数据库删除数据Delete语句和Truncate语句的对比.pdf

    三、Delete与Truncate的对比 在处理大量数据时,Delete语句的性能通常低于Truncate。这是因为Delete会逐行删除并产生回滚信息,而Truncate则直接丢弃表的所有数据,不涉及回滚,这使得Truncate在处理大数据量时速度...

    truncate,delete,drop的异同点

    在数据库管理中,`TRUNCATE`, `DELETE`, 和 `DROP` 是三种常见的数据操作语言(DML)与数据定义语言(DDL)。这三种命令都有助于管理和调整数据库表结构及其中的数据,但它们之间的差异十分重要。 #### 1. TRUNCATE...

    oracle数据库删除数据Delete语句和Truncate语句的对比.docx

    Oracle 数据库删除数据 Delete 语句和 Truncate 语句的对比 Delete 语句和 Truncate 语句是 Oracle 数据库中两种常用的删除数据的方法,但是它们之间存在着明显的差异。 一、Delete 语句 Delete 语句是一种 DML...

Global site tag (gtag.js) - Google Analytics