`
takkymj
  • 浏览: 128239 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

如何海量删除全表数据--Truncate table同delete,drop的区别

阅读更多
曾经在SQL SERVER中删除全表海量数据(》200W笔),用delete删除了半天.被前辈看到后大骂我蠢:"用truncate table啊"。
可怜我才疏学浅,后去遍查资料,方知truncate table兄实乃快速删除全表之人间利器啊.现将其优劣道之一二:
       从功能上看,truncate table同不带where子句的delete是一样的,但是其运行速度决定是杠杠的(),要远远快于delete同学.

一。truncate table优点:以下是truncate table同delete相比的优点,

1.所用的事务日志空间较少。DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一个条目。TRUNCATE TABLE 通过释放用于存储表数据的数据页来删除数据,并且在事务日志中只记录页释放。这也是truncate table删除全表速度优于delete的原因.
2.使用的锁通常较少。当使用行锁执行 DELETE 语句时,将锁定表中各行以便删除。TRUNCATE TABLE 始终锁定表和页,而不是锁定各行。
3.表中不留下任何页。执行 DELETE 语句后,表仍会包含空页。例如,必须至少使用一个排他 (LCK_M_X) 表锁,才能释放堆中的空表。如果执行删除操作时没有使用表锁,表(堆)中将包含许多空页。对于索引,删除操作会留下一些空页,尽管这些页会通过后台清除进程迅速释放。

二.truncate table的使用
     那么可不可以用 TRUNCATE TABLE 代替不带 WHERE 的 DELETE 呢?在以下情况是不行的:
1.要保留标识的情况下不能用 TRUNCATE TABLE,因为 TRUNCATE TABLE 会重置标识(如表中的自增量类型字段).TRUNCATE TABLE 删除表中的所有行,但表结构及其列、约束、索引等保持不变。新行标识所用的计数值重置为该列的种子。如果想保留标识计数值,请改用 DELETE。如果要删除表定义及其数据,请使用 DROP TABLE 语句。
2.需要使用触发器的情况下不能使用 TRUNCATE TABLE ,它不会激发触发器。
3.对于由 FOREIGN KEY 约束引用的表(即主键所在的表,不是外键所在的表)不能使用 TRUNCATE TABLE。
4.对于参与了索引视图的表不能使用 TRUNCATE TABLE ,注意指索引视图,并非普通视图。

看来,truncate虽然好用,但也有一定的限制,使用该方法操作表时,先确定对象表中是否有标识,触发器,是否参与了索引视图等.个中玄机,还是在使用中慢慢体味吧~


分享到:
评论

相关推荐

    truncate,delete以及drop区别汇总

    - **相同点**:`truncate` 和不带 `where` 子句的 `delete`,以及 `drop` 都会删除表内的数据。 - **不同点** - `truncate` 和 `delete` 只删除数据不删除表结构;`drop` 会删除表结构及相关对象。 - `delete` ...

    delete,truncate和drop的区别

    尽管`drop`、`truncate`和`delete`都是DDL或DML操作,但在Oracle中,仍有可能恢复已删除的数据或表: - **drop操作**:如果Oracle的回收站功能被启用,则可以通过回收站恢复已删除的表。需要注意的是,这取决于表...

    数据库中truncate,delete,drop语句的比较

    ### 数据库中truncate、delete与drop语句的深入解析 #### 一、基本概念与应用场景 在数据库管理中,`truncate`、`delete`与`drop`是三种常见的SQL语句,它们各自拥有不同的功能与用途,对于初学者来说,区分这三种...

    sql之truncate、delete与drop区别

    总结来说,`TRUNCATE` 适用于快速无痕地清空表,`DELETE` 更适合有选择性地删除数据并支持事务回滚,而 `DROP` 用于永久性地移除数据库对象。在使用这些语句时,应根据具体需求和业务场景权衡其优势和风险,确保数据...

    TRUNCATE与 DELETE区别

    最后,如果你想完全删除表及其定义,应当使用 DROP TABLE 语句,而不是 TRUNCATE 或 DELETE,因为后者仅删除表中的数据,保留表结构。 综上所述,TRUNCATE TABLE 和 DELETE 在性能、资源消耗和行为特性上都有明显的...

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

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

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

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

    利用 Oracle 系统触发器防止误删除表操作

    当DBA或其他用户具有足够的权限时,可能会因为输入错误等原因执行`DROP TABLE`或`TRUNCATE TABLE`命令,导致重要的数据表被意外删除或清空。例如,用户原本打算删除名为`A`的表(`DROP TABLE A CASCADE CONSTRAINTS;`...

    Truncate Table的用法讲解

    `TRUNCATE TABLE` 是 SQL 语言中一种用于删除表中所有数据的命令,但它与 `DELETE` 语句有着显著的区别。这篇文章将深入讲解 `TRUNCATE TABLE` 的使用方法,以及它与 `DELETE` 的对比,同时涵盖权限、适用场景及注意...

    SQL删除语句DROP、TRUNCATE、 DELETE 的区别

    - DROP删除整个表及其依赖项,而TRUNCATE和DELETE只删除数据。 - DELETE是可回滚的,TRUNCATE和DROP不是。 - DELETE可能触发触发器,而TRUNCATE和DROP不会。 - DELETE不影响高水线,而TRUNCATE和DROP会重置或释放...

    MySQL删除表数据 MySQL清空表命令 3种方法

    在MySQL数据库管理中,删除表数据是常见的操作,这可能是为了清理旧数据、测试环境的重置或数据更新。本文将详细介绍三种不同的方法来删除MySQL中的表数据,帮助你更有效地管理数据库。 ### 方法一:TRUNCATE TABLE...

    oracle 在删除表,表空间,用户时 如何释放磁盘空间.pdf

    - **TRUNCATE TABLE**:与`DELETE`不同,`TRUNCATE`命令会删除表中的所有数据,但保留表结构。此操作不支持回滚,且速度更快。然而,它不会释放表空间,除非使用`ALTER TABLE ... DEALLOCATE UNUSED`命令。 2. **...

    实例理解SQL中truncate和delete的区别

    本文以一个简单实例为大家介绍了SQL中truncate和delete的区别,帮助大家理解,具体内容如下 ---创建表Table1 IF OBJECT_ID('Table1','U') IS NOT NULL DROP TABLE Table1 GO CREATE TABLE Table1 (ID INT NOT NULL,...

    delete from 表名与truncate table 表名区别

    在数据库管理中,`DELETE` 和 `TRUNCATE TABLE` 是两种常见的用于清空数据表的语句,但它们在具体的行为和效果上存在显著差异。以下是对这两个语句的详细解析: 1. **对自动编号列的影响**: - `DELETE` 语句会...

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

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

    oracle数据库删除数据Delete语句和Truncate语句的使用比较

    在Oracle数据库中,删除表中数据有两种主要方式:Delete语句和Truncate语句。两者在功能上相似,但有着显著的区别,适用于不同的场景。 **Delete语句** Delete语句是一种灵活的数据删除方式,它可以有条件地删除...

Global site tag (gtag.js) - Google Analytics