首页 > 其他分享 >truncate和delete的区别

truncate和delete的区别

时间:2023-05-11 11:23:39浏览次数:39  
标签:回滚 truncate 删除 区别 重置 DML delete

truncate和delete的区别在于四个方面:1. 条件删除、2. 事务回滚、3. 清理速度、4. 高水位重置。因为delete是可以带WHERE的,所以支持条件删除;而truncate只能删除整个表。

1. 条件删除

这个比较好理解,因为delete是可以带WHERE的,所以支持条件删除;而truncate只能删除整个表。

2. 事务回滚

由于delete是数据操作语言(DML - Data Manipulation Language),操作时原数据会被放到 rollback segment中,可以被回滚;而truncate是数据定义语言(DDL - Data Definition Language),操作时不会进行存储,不能进行回滚。

3. 清理速度

在数据量比较小的情况下,delete和truncate的清理速度差别不是很大。但是数据量很大的时候就能看出区别。由于第二项中说的,truncate不需要支持回滚,所以使用的系统和事务日志资源少。delete 语句每次删除一行,并在事务日志中为所删除的每行记录一项,固然会慢,但是相对来说也较安全。

4. 高水位重置

随着不断地进行表记录的DML操作,会不断提高表的高水位线(HWM),delete操作之后虽然表的数据删除了,但是并没有降低表的高水位,随着DML操作数据库容量也只会上升,不会下降。所以如果使用delete,就算将表中的数据减少了很多,在查询时还是很和delete操作前速度一样。

而truncate操作会重置高水位线,数据库容量也会被重置,之后再进行DML操作速度也会有提升。

标签:回滚,truncate,删除,区别,重置,DML,delete
From: https://www.cnblogs.com/bellin124/p/17390502.html

相关文章

  • C语言中.与->的区别
    (一)基础结构体用点,结构体指针用箭头。a->b 的含义是 (*a).b 。  现代的标准化的C语义上来说, -> 可以用 * 和 . 的组合实现。简单的说,就是一个快捷方式,一个语法糖。(二)例子在机器码和汇编的角度来看,不存在变量,不存在struct这种东西,只存在寄存器和一个叫做内存的......
  • location.href和location.replace的区别
    情景比如支付过程中或者使用商品的优惠券,而使用这张优惠券需要取请求一个第三方的地址,中间会有一次跳转。若使用window.location.href=“url”,按流程操作是没问题的,但是如果用户点击返回,则无法跳回原本的提交订单的页面,会一直进行重复请求,造成程序出错。所以,必须替换成wind......
  • 互联网、因特网和万维网的区别
    互联网、因特网和万维网的区别互联网互联网的定义比较多样。目前最权威的定义是现行的通信名词术语标准(GB/T32402-2015【正版】通信名词术语数据通信因特网),里面对互联网的定义是“由多个计算机网络相互连接而成的网络,它是在功能和逻辑上组成的一个大型网络”。这和英文的inte......
  • 接口继承和抽象类继承区别以及普通类和抽象类做基类的区别
    接口继承和抽象类继承区别C#中接口和抽象类都可以用于实现继承,但是它们有一些重要的区别。接口是一种行为规范,它只规定了类应该包括哪些方法,但是没有提供任何实现细节,因此实现接口的类必须提供所有规定的方法实现;抽象类是一种半成品类,它可以包含实现代码以及其他抽象方法,子类必......
  • mysql中删除时报错Cannot truncate a table referenced in a foreign key constraint
    在Mysql使用Truncate截断表时,提示Cannottruncateatablereferencedinaforeignkeyconstraint(monitoritem,CONSTRAINTmonitortaskpollutant_monitortask_fk)。这是因为存在外键约束导致的无法删除,我们可以先关闭外键约束,删除后再启动外键约束。1、检查外键约束SELE......
  • JS中some和every的区别和用法
    some和every是数组中迭代的方法相同点:some和every都有三个参数,即item→当前项,index→当前的索引值,array→数组本身;都可以遍历数组不同点:some相当于逻辑关系中的或,只要有一个参数满足条件,则中断遍历,返回true,如果遍历完所有参数,没有找到符合的项,即返回false;every相当于关系中的且,......
  • count(*)、count(1)、count(列名)有什么区别
    转载:https://juejin.cn/post/6854573219089907720https://juejin.cn/post/7152086171244298254......
  • openai模型个性化训练Embedding和fine-tuning区别
    现在基于自然语言和文档进行对话的背后都是使用的基于嵌入的向量搜索。OpenAI在这方面做的很好,它的Cookbook(github.com/openai/openai-cookbook)上有很多案例,最近他们对文档做了一些更新。GPT擅长回答问题,但是只能回答它以前被训练过的问题,如果是没有训练过的数据,比如一些私有数据......
  • 常量指针和指针常量的区别
     定义变量inta=1;intb=2; 常量指针:顾名思义,指向常量的指针(apointertoconstint),不能通过该指针修改变量的值(不通过该指针仍然可以修改)constint*p1=&a; // *p1为const,即指针指向的值为const*p1+=1;  // 错误,试图通过p1修改a的值p1=&b;   ......
  • django中aggregate()和annotate()区别
    在Django中,aggregate()和annotate()是两个常用的聚合函数。它们都可以用来对一组查询结果进行聚合操作,但它们的作用是有所不同的。aggregate()是用于聚合整个查询集的结果,通常用于返回一个值,例如计算查询集中所有结果的数量、平均值、最大值或最小值等。使用aggregate()......