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

truncate和delete的区别

时间:2023-11-16 21:11:41浏览次数:32  
标签:回滚 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/Avicii2018/p/17837277.html

相关文章

  • 11.16 基本完成个人任务管理系统项目后重新复习JavaScript高级程序设计——声明var与l
    我看的是js高级程序设计第四版,前两章快速了解了一下,第三章开始慢啃,虽然内容枯燥,很多东西自己也知道了,但还是有一些收获的。比如,声明变量的三个关键词:var、let、const;var以前经常用但是会出问题,相比let没有那么严谨(var声明范围函数作用域,而let声明范围块级作用域)。看个例子:这是v......
  • 为什么要用JWT,JWT与Seeion区别
    一、为什么使用JWTHTTP是无状态的,开发人员需要基于HTTP来模拟实现状态的保存。经典的实现用户登录的做法是用Session,用户登录验证成功后,服务端生成SessionId。服务端会将SessionId与登录的用户信息的对应关系保存在服务器内存中,同时将SessionId返回给浏览器端,sessionId一般存储在......
  • 多线程threading模块(二)daemon和join的区别
    PythonVersion:3.10.12案列一:最简洁的情况,在多线程代码中不开启daemon或join功能。importthreadingimporttimeloop_count=5defcount_num(num):print('子线程<{}>开始运行'.format(num))forxinrange(10):time.sleep(x)print('子线程<{}>结束......
  • flannel和calico的区别
    一,flannel和calico是为了解决什么问题 Flannel和Calico主要是为了解决容器间通信和容器与宿主机之间的通信问题。这些问题在云计算、大数据等场景下尤为重要,因为在这些场景中,需要支持大规模的容器部署和管理,并保证网络的高性能、灵活性和安全性。 二,flannel和calico的实现原......
  • vue2和vue3ref的区别(详解)
    Vue2和Vue3中ref的区别如下:在Vue2中,ref主要用于在模板中获取DOM元素或组件实例。而在Vue3中,虽然ref也可以获取DOM元素或组件实例,但更重要的是,它还可以将一个基本类型的变量转换成响应式的数据,无需再通过复杂的步骤来访问响应式数据。另外,Vue3的ref还支持对象属性和数组索引......
  • 什么是e2e测试 什么是单元测试,他们的区别
    "E2E测试"中的"E2E"代表"端到端"(End-to-End)。在这里,“端”指的是软件应用或系统的整个流程的起点和终点。在端到端测试中,测试的重点是模拟用户的实际使用场景,从而确保整个应用程序或系统从开始到结束都能按预期工作。具体来说,这些“端”可以是:用户界面(UI)端:用户与系统交互......
  • 详解数据库SQL中的三个语句:DROP、TRUNCATE 、DELETE
    本文分享自华为云社区《GaussDB数据库SQL系列-DROP&TRUNCATE&DELETE》,作者:Gauss松鼠会小助手2。一、前言在数据库中,SQL作为一种常用的数据库编程语言,扮演着至关重要的角色。SQL不仅可以用于创建、修改和查询数据库,还可以通过DROP、DELETE和TRUNCATE等语句来删除数据。这些......
  • C#中 (int)、int.Parse()、int.TryParse、Convert.ToInt32()四种转换的区别
    1、(int)是一种类型转换;当我们从int类型到long,float,double,decimal类型,可以使用隐式转换,但是当我们从long类型到int类型就需要使用显式转换,否则会产生编译错误。2、int.Parse()是一种类容转换;表示将数字内容的字符串转为int类型。  如果字符串为空,则抛出ArgumentNullExcept......
  • Get和Post请求区别
    1、Get从指定的资源请求数据,一般用于查询操作。Post向指定的资源提交要被处理的数据,用于将数据发送给服务器,一般用于修改和写入数据。2、Post请求更安全,post请求不会作为url的一部分,请求参数放到body中,不会被缓存。Get请求则是将参数作为Query放到URL中作为一部分,同时Get请求会被......
  • HTTP和HTTPS区别
    1、HTTP是明文传输,不安全。HTTPS是加密传输,更安全,有效防止数据被第三方篡改,但是双方加解密也带来了更多的资源消耗。2、HTTP标准端口是80,HTTPS标准端口是443.3、HTTP不用认证证书,HTTPS需要认证证书(要钱)4、连接方式不同,HTTP三次握手,HTTPSLTS1.2版本7次,HTTPSLTS1.3版本6次。......