在我带的某个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中保留一些相关的信息。
分享到:
相关推荐
### delete,truncate和drop的区别详解 #### 一、概述 在数据库管理中,经常会遇到需要删除数据或表的情况。为了确保数据的准确性和安全性,理解`delete`、`truncate`和`drop`这三个命令的区别至关重要。本文将详细...
9.1.3 drop,delete与truncate的区别
在数据库管理中,TRUNCATE 和 DELETE 是两种用于删除数据的方法,它们各有其特定的适用场景和优缺点。本文将详细对比分析这两种操作的区别。 首先,TRUNCATE TABLE 是一种快速删除表中所有数据的方式,它并不记录每...
drop、delete、truncate都表示删除,但是三者有一些差别: Delete用来删除表的全部或者一部分数据行,执行delete之后,用户需要提交(commmit)或者回滚(rollback)来执行删除或者撤销删除。会触发这个表上所有的...
"SQL中truncate和delete的区别" SQL中truncate和delete是两种不同的数据删除方式,它们之间存在许多关键的区别。本文将详细阐述truncate和delete的不同之处,以便读者更好地理解和选择这两种删除方式。 -delete的...
### truncate, delete 以及 drop 区别汇总 #### 一、概述 在数据库管理中,经常需要对数据表进行各种操作,比如删除表中的数据、删除整个表等。`truncate`, `delete` 和 `drop` 是三种常见的 SQL 命令,它们在功能...
与 `TRUNCATE` 不同,`DELETE` 操作会记录在事务日志中,因此可以被回滚,支持数据恢复。此外,`DELETE` 会触发表上的触发器和检查约束,这可能会对性能产生影响,尤其是在处理大量数据时。 `DROP` 语句则是用来...
### SQL之TRUNCATE、DELETE与DROP的区别 #### 概述 在SQL中,`TRUNCATE`、`DELETE`和`DROP`都是用于管理数据库表的重要命令,但它们之间存在显著的区别。本文将深入探讨这三种命令的功能、用法及其应用场景。 ####...
本文主要讲mysql中三种删除表的操作,delete语句、truncate语句以及drop语句的区别: 简介 delete 1、删除整张表的数据: delete from table_name; 2、删除部分数据,添加where子句: delete from table_name ...
总结来说,`DROP`、`DELETE`和`TRUNCATE`在处理数据时各有其特定的应用场景和限制,理解它们之间的区别对于有效地管理数据库至关重要。在进行数据清理时,根据具体需求选择合适的方法,同时确保数据的安全性和可恢复...
在MySQL数据库管理中,删除数据的操作主要有两种方式:`DELETE` 和 `TRUNCATE`。它们虽然都能实现数据的删除,但在使用场景、性能和效果上有着显著的区别。以下是关于这两种操作的详细解释: 1. **`DELETE` 命令** ...
注意:这里说的delete是指不带where子句的delete语句 相同点 truncate和不带where子句的delete, 以及drop都会删除表内的数据 不同点: 1. truncate和 delete只删除数据不删除表的结构(定义) drop语句将删除表的结构被...
前言 上周同事小姐姐问我:“哈哥你看,我发现...咱们常用的三种删除方式:通过 delete、truncate、drop 关键字进行删除;这三种都可以用来删除数据,但场景不同。 一、从执行速度上来说 drop > truncate >> DELETE 二
- 效率方面,`TRUNCATE`通常比`DELETE`快,因为它不需要记录每行的删除操作,也不触发任何与删除相关的触发器。 - 日志记录,`DELETE`操作会被记录在事务日志中,对于可恢复性有保障,而`TRUNCATE`则不记录,这...
3. 区别与选择: - DELETE可以有条件地删除数据,而TRUNCATE总是删除全部数据。 - DELETE支持事务和回滚,TRUNCATE不支持。 - DELETE支持LIMIT和ORDER BY,TRUNCATE不支持。 - DELETE在删除大量数据时,如果有...
三、Delete与Truncate的对比 在处理大量数据时,Delete语句的性能通常低于Truncate。这是因为Delete会逐行删除并产生回滚信息,而Truncate则直接丢弃表的所有数据,不涉及回滚,这使得Truncate在处理大数据量时速度...
在数据库管理中,`TRUNCATE`, `DELETE`, 和 `DROP` 是三种常见的数据操作语言(DML)与数据定义语言(DDL)。这三种命令都有助于管理和调整数据库表结构及其中的数据,但它们之间的差异十分重要。 #### 1. TRUNCATE...
Oracle 数据库删除数据 Delete 语句和 Truncate 语句的对比 Delete 语句和 Truncate 语句是 Oracle 数据库中两种常用的删除数据的方法,但是它们之间存在着明显的差异。 一、Delete 语句 Delete 语句是一种 DML...