TRUNCATE 语句到底因何而慢?

Postgresql频繁delete表数据后,数据库表数据很少,但是查询速度超级慢 数据库的表里只有一千多条数据,系统中有两个定时任务,每隔1分钟会对表数据进行一次delete和insert,刚开始数据查询很快,但是在运行了一段时间后,这个表的查询速度就越来越慢,达到了十几秒。 阅读详情

作者通过源码分析 truncate 语句形成慢 SQL 的原因和解决方案,并与 MySQL 5.7就相关实现逻辑进行对比。

问题现象

收到反馈某测试环境执行批量操作时,有 truncate 语句存在于慢查询日志中。担心上线后可能影响数据库,请求 DBA 配合分析。

关键配置

配置项说明
数据库版本MySQL 5.7
参数 long_query_time
慢查询阈值,单位为秒
0.1(100 毫秒)
参数 innodb_adaptive_hash_indexON

问题分析总结

总结下来主要有如何几个问题:

Q1: TRUNCATE 语句是如何执行的?fd 句柄不变化?为什么执行时间长?

TRUNCATE 语句如何执行?

关键堆栈:

关键操作 debug:

为什么执行时间长?

从以上堆栈可以看到,耗时过程主要是 row_drop_table_for_mysql、os_file_delete_func。

其中:row_drop_table_for_mysql 主要是调用 btr_drop_ahi_for_table 执行 AHI 的 page 页的删除。os_file_delete_func 主要调用 unlink 执行文件的清理。

句柄为什么不变化?

假如需要 truncate 的表分配的 fd 为 43,truncate 过程中,会先将表 rename。这个时候这个 fd 会被关闭,43 就被释放了。然后执行 create table 操作。一般这个间隙过程很短,因此新建立的表可以使用被释放的 43 了,所以会看到 fd 没有变化。

如果 rename 之后,在内部执行 create table 之前,又打开了新文件,那这时候 fd 43 就会被其它打开的文件持有,truncate 之后表的 fd 也就会发生变化。

注意:MySQL 8.0 是真正使用 rename + create + drop实现的 truncate,但 MySQL 5.7 是通过文件的 truncate 实现的。

Q2: 如何分析 TRUNCATE 慢的问题?

方式一:慢日志?

只能看到慢的结果,无法确认原因。

方式二:执行计划?

不支持 truncate 语句。

方式三:profile

从 profile 结果来看,对于 truncate 语句,只能看到耗时过程都在System lock 上,无法看到更近一步的原因。

方式四:DEBUG

// 推荐设置
// 其中 T 其实是 MySQL 支持(在 trace 中打印时间)的,但官方文档中缺少了说明。已提交bug说明:Bug #111174

set global debug='d:t:T:i:n:N:o,/tmp/debug_3306.trace.f';
set global debug='';

  • ① 表示 show processlist 的线程 ID
  • ② 执行时间
  • ③ 函数调用层级
  • ④ 函数名称

MySQL 8.0 切换对比

// TRUNCATE
// 默认规范配置
// innodb_flush_method = on & innodb_flush_method = O_DIRECT
(root@127.1) [eolbimsdb] 08:44:46 15> truncate table t5;
Query OK, 0 rows affected (0.98 sec)

// 设置 innodb_adaptive_hash_index = off
(root@127.1) [eolbimsdb] 08:52:03 5> truncate table t5;
Query OK, 0 rows affected (0.03 sec)

// 设置 innodb_flush_method = fsync
(root@127.1) [eolbimsdb] 09:03:34 28> truncate table t5;
Query OK, 0 rows affected (1.04 sec)

// 设置  innodb_adaptive_hash_index = off & innodb_flush_method = fsync
(root@127.1) [eolbimsdb] 09:20:24 5> truncate table t5;
Query OK, 0 rows affected (0.22 sec)


// DROP
// 默认规范配置
// innodb_flush_method = on & innodb_flush_method = O_DIRECT
(root@127.1) [eolbimsdb] 10:05:41 9> drop table t5;
Query OK, 0 rows affected (0.94 sec)


// 设置 innodb_adaptive_hash_index = off & innodb_flush_method = O_DIRECT
(root@127.1) [eolbimsdb] 09:44:24 5> drop table t5;
Query OK, 0 rows affected (0.01 sec)

// 设置 innodb_flush_method = on & innodb_flush_method = fsync
(root@127.1) [eolbimsdb] 09:32:15 13> drop table t5;
Query OK, 0 rows affected (1.13 sec)

// 设置  innodb_adaptive_hash_index = off & innodb_flush_method = fsync
(root@127.1) [eolbimsdb] 09:25:10 14> drop table t5;
Query OK, 0 rows affected (0.19 sec)

Q3: 能否优化?慢在哪里?post_ddl 如何调用?

从 Q1 的结果中可以看出,执行的主要耗时在 row_drop_table_for_mysql、os_file_delete_func:

MySQL 8.0 的优化措施

  1. row_drop_table_for_mysql 慢的问题,可以通过设置 innodb_adaptive_hash_index = off 进行优化;
  2. os_file_delete_func 慢的问题,可以设置 innodb_flush_method = O_DIRECT 或者配置表的 HARD LINK 进行优化。

MySQL 5.7 的优化措施

详见后面 3-Q1、3-Q4 部分。

post_ddl 如何调用?

MySQL 8.0 引入了 scope guard 功能:当定义了 scope guard 之后,会创建 Scope_guard 对象。正常情况下,当执行 return 操作前,会执行 scope guard 定义的逻辑。除非在函数结束前执行 Scope_guard 对象的 commit 操作。文件的删除功能实在 scope guard 的 cleanup_base 阶段调用是现的。

Q4: 生产执行 TRUNCATE 是否存在隐患?

从实现机制来看,主要有以下风险:

IO 压力

当触发 truncate 操作后,需要在短时间由数据库线程将文件 unlink 或 truncate,如果被处理的文件很大,服务器的 IO 压力可能会影响正常的数据库请求。

内存并发

在执行 truncate、drop 的过程中,由于需要对内存的数据进行清理,特别是对 LRU 和 flush_LRU 进行扫描,并释放对应的数据块。这个过程是需要逐个根据 buffer pool instance 获取 mutex 资源的。如果在业务高峰期,特别是 buffer pool 较大时,可能会影响正常的业务情况。

同时,执行 create drop table 操作时需要 dict_operation_lock 的 X 锁(RW_X_LATCH),而一些其他后台线程,比如 Main Thread 检查 dict cache 时,也需要获取 dict_operation_lock 的 X 锁,因此被阻塞。然后用户线程可能由于获取不到锁而处于挂起状态,当无法立刻获得锁时。更多参考:《Drop Table 对 MySQL 的性能影响分析》。

Q5: 不同版本对于 TRUNCATE 的实现是否存在差异?

通过对比 2-Q1 与 3-Q4:

MySQL 8.0 的 truncate 实现方式基本和 drop 实现方式相同,包括主要的耗时位置(都在 row_drop_table_for_mysql、os_file_delete_func)都是相同的。

MySQL 5.7 的 truncate 和 drop 实现差异较大,整个实现过程几乎是完全独立的代码。truncate 使用 row_truncate_table_for_mysql,drop 使用 row_drop_table_for_mysql;truncate 操作的主要的耗时有 dict_drop_index_tree、os_file_truncate。

DROP TABLE 优化失败分析

下面来看一个 MySQL 5.7 测试环境上线 DROP TABLE 优化方案失败问题。

  • 当 MySQL 5.7 使用规范配置启动时,从 debug-trace 过程来看,在row_drop_single_table_tablespace、row_drop_table_from_cache 函数执行期间根本没有耗时,所以实施优化方案后,没有效果;
  • 耗时的过程在 que_eval_sql: query: PROCEDURE DROP_TABLE_PROC ---> dict_drop_index_tree;
  • row_drop_single_table_tablespace 的耗时被 MySQL 5.7 配置innodb_flush_method=O_DIRECT 优化了。

Q2:该优化是否适用于 MySQL 8.0?

设置 innodb_flush_method=O_DIRECT 的优化操作,同样适用于 MySQL 8.0。

Q3:MySQL 8.0 如何解决 DROP TABLE 时执行 DROP_TABLE_PROC 慢的问题?

  • WL#9536: InnoDB_New_DD: Support crash-safe DDL;
  • 依赖于自 Version 8.0.3 的 NEW DD;
  • 整个 drop 慢的 que_eval_sql、DROP_TABLE_PROC 被整体砍掉;
  • 包括 dict_drop_index_tree 在内的整个函数,都被砍了;
  • 具体实现机制,参考分析 NEW DD 实现方法。

Q4:MySQL 5.7 DROP TABLE 和 TRUNCATE 在实现机制、优化措施有何区别呢?

  • 执行 truncate 操作的耗时,仍然是在 dict_drop_index_tree、os_file_truncate 这两个阶段;
  • os_file_truncate 的耗时:可以通过设置 innodb_flush_method=O_DIRECT 时间进行优化(不可以通过 hard link 进行优化);
  • dict_drop_index_tree 的耗时,暂时没有优化思路。了解更多:InnoDB 文件系统之文件物理结构。

Q5:5.7 慢查询为什么有时记录 TRUNCATE 执行慢,有时不记录?

根据源码,MySQL 是否记录慢查询判断时,主要有两个维度:一个是执行时间(不包括 utime_alter_lock);一个是执行扫描的行数,并对特殊的语句(如 call)进行了忽略。对于 truncate 操作而言,无论执行时间是多少,扫描行数都是 0。当配置了 min_examined_row_limit 大于 0 之后,一般 truncate 操作由于不满足该条件,都不会被记录到慢查询。

但是当 truncate 操作位于存储过程中时,在 truncate 操作之前有其它 DML 操作(如 insert selecct),这时候由于位于同一个 THD 下,在 MySQL 5.7 版本里面 thd->get_examined_row_count() 返回的结果其实是上一个 DML 语句的(这里应该是缺陷)。如果此时 truncate 操作的执行时间又超过了 long_query_time,那么此时这个 truncate 语句就会被记录慢查询。

同时,在 MySQL 8.0 针对 call 的语句,将不在单独记录记录的语句。而是记录为统一的 call 语句里面。需要看存储过程里面的语句执行情况,可以用 show profiles 查看。

慢查询记录堆栈

测试存储过程

DROP PROCEDURE truncate_test;
DELIMITER //
CREATE PROCEDURE truncate_test()
BEGIN
  insert into t1 select * from t1_bak;
  truncate table t1;
END
//
DELIMITER ;

call truncate_test();

mysql> call truncate_test();
Query OK, 0 rows affected (1 min 59.58 sec)
# Time: 2023-06-08T00:28:30.969993+08:00
# User@Host: root[root] @ localhost []  Id:     2
# Schema: db2  Last_errno: 0  Killed: 0
# Query_time: 119.177518  Lock_time: 0.000233  Rows_sent: 0  Rows_examined: 131072  Rows_affected: 131072
# Bytes_sent: 0
# Stored_routine: db2.truncate_test
use db2;
SET timestamp=1686155310;
insert into t1 select * from t1_bak;
# Time: 2023-06-08T00:28:31.375873+08:00
# User@Host: root[root] @ localhost []  Id:     2
# Schema: db2  Last_errno: 0  Killed: 0
# Query_time: 0.405734  Lock_time: 0.003310  Rows_sent: 0  Rows_examined: 131072  Rows_affected: 0
# Bytes_sent: 0
# Stored_routine: db2.truncate_test
SET timestamp=1686155311;
truncate table t1;

与 MySQL 8.0 对比

mysql> call truncate_test();
Query OK, 0 rows affected (2 min 28.51 sec)

# Time: 2023-06-07T17:18:39.215632Z
# User@Host: root[root] @ localhost []  Id:     8
# Query_time: 148.516478  Lock_time: 0.000372 Rows_sent: 0  Rows_examined: 172032
use testdb;
SET timestamp=1686158318;
call truncate_test();

MySQL 8.0 如何跟踪?

mysql> call truncate_test();
Query OK, 0 rows affected (2 min 24.84 sec)

mysql> 
mysql> 
mysql> show profiles;
+----------+--------------+-----------------------------------------+
| Query_ID | Duration     | Query                                   |
+----------+--------------+-----------------------------------------+
|        1 | 144.55113600 | insert into ltb2 select * from ltb3_bak |
|        2 |   0.29312375 | truncate table ltb2                     |
+----------+--------------+-----------------------------------------+
2 rows in set, 1 warning (0.00 sec)

以上包括 truncate 执行慢的分析,如针对细节有任何疑问和建议,欢迎留言交流。

关于 SQLE

爱可生开源社区的 SQLE 是一款面向数据库使用者和管理者,支持多场景审核,支持标准化上线流程,原生支持 MySQL 审核且数据库类型可扩展的 SQL 审核工具。

SQLE 获取

类型地址
版本库https://github.com/actiontech/sqle
文档https://actiontech.github.io/sqle-docs/
发布信息https://github.com/actiontech/sqle/releases
数据审核插件开发文档https://actiontech.github.io/sqle-docs-cn/3.modules/3.7_auditplugin/auditplugin_development.html
DML 语句和truncate insert 增加数据 --给这条数据的所有字段赋值 values()中匹配所有字段的值,值的顺序匹配字段的顺序 insert into sxt_class values(123,'java11期'); --插入数据为指定字段赋值 --insert into sxt_class(字段1,字段2..) values(值1,值2..); 值和字段的顺序必须匹配 insert into sxt... 阅读详情

相关推荐

深入探索MySQL中的TRUNCATE语句:快速清空表格数据的强大利器

TRUNCATE语句是MySQL中用于快速删除表中所有数据的命令,其效率和特性使其成为处理大量数据时的首选。相比于DELETE语句,TRUNCATE的执行速度更快且资源消耗更低,但也存在一些需要注意的限制。在本文中,将详细介绍TRUNCATE语句的优势、局限性以及最佳实践,帮助你更好地应用它来管理MySQL数据库中的数据。

专注于深入研究多种编程语言,以实战为导向,逐步拓展开发技能,提升工程化编码和思维能力,展现无敌技术实力。 1671

truncate table执行很慢的原因分析

truncate table执行很慢可能有以下几个原因:首先要明白truncate table是DDL操作,会重置HWM。1.查看是不是DML操作锁定了某些记录2.segment header竞争[@more@] ...

cqcq2013的博客 7262

Skiplist,B,B+tree,LSM tree

SkipList 理解(如何实现): 即使是有序的链表,查找的时间复杂度也是O(n),但链表不能随机访问所以不适用于二分查找,使得查找的时间复杂度为O(logn)。 于是将有序链表和二分查找结合得到了SkipList,类似于二叉搜索树,这是一种以空间换时间的算法,通过在每个节点中增加向前的指针,从而提升查找效率(如下图所示)。 一开始如a所示,是一个有序的链表,时间复杂度O(n)。随后建立了e所示的SkipList,从最顶层往下查找,可以跳过许多元素,减少查找次数。 ​

weixin_45875458的博客 947

MySQL truncate导致慢查询根因竟然是“多此一举”

trucate为什么会导致慢查询?居然是因为多此一举!多少线上故障,皆付笑谈中。。。

postgres20的博客 2389

HDLBits答案汇总

前言 该博客为本人做HDLBits习题时的心得记录总结,欢迎大家一起交流进步。 HDLBits网站链接 Verilog Language Basics Vectors Modules:Hierarchy Procedures More Verilog Features Circuits Combinational Logic Basic gates Multiplexers Arithmetic Circuits Karnaugh Map to Circuit Sequential Logic Latche

谦豫 9万+

AHB总线协议

1. 简介         AHB总线规范是AMBA总线规范的一部分,AMBA总线规范是ARM公司提出的总线规范,被大多数SoC设计采用,它规定了AHB (Advanced High-performance Bus)、ASB (Advanced System Bus)、APB (Advanced Peripheral Bus)。AHB用于高性能、高时钟频率的系统结构,典型的应用如ARM核与系统内

ivy_reny的专栏 8万+

mysql truncate 慢 处理措施

MySQL 8.0 的 truncate 实现方式基本和 drop 实现方式相同,包括主要的耗时位置(都在 row_drop_table_for_mysql、os_file_delete_func)都是相同的。truncate 操作的主要的耗时有 dict_drop_index_tree、os_file_truncate。row_drop_table_for_mysql 慢的问题,可以通过设置 innodb_adaptive_hash_index = off 进行优化;MySQL 8.0 的优化措施。

Lixora's DB Home 1193

【Go语言实战】(26) 分布式搜索引擎

基于go语言的分布式搜索引擎

面向生活编程 2379

关于 truncate table 的一点学习札记

---以下整理笔记来之 itpub 的各位前辈的语录,这里做了一个汇总,仅供学习。   truncate table后,oracle会回收表和其表中所在的索引到initial 大小,也就是初始分配的segments大小 truncate和drop一样都是ddl语句, 操作立即生效,原数据不放到rollback segment中,不能回滚 truncate table执行很慢可能有以下几个原

Lixora's DB Home 2484

【OpenClaw从入门到精通】第23篇:OpenClaw办公自动化实战—报表生成+文档批量处理+跨系统同步(2026实操进阶版)

本文聚焦OpenClaw在办公自动化场景的进阶应用,针对职场中高频且重复的报表生成、文档批量处理、跨系统数据同步三大痛点,提供从环境搭建、原理讲解到完整代码实现的全流程实操指南。方案基于Python生态工具链(pandas、Playwright、PyPDF2等)与OpenClaw的低代码编排能力,兼顾新手入门与进阶提升——新手可直接复用代码快速落地,进阶读者可学习流程编排逻辑进行二次开发。所有案例均基于真实办公场景设计,部分虚拟场景已明确标注,代码经本地环境验证可复现。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 965

MicroCap声学仿真介绍(六)-入耳式耳机仿真

从上图可以看出,后腔开了泄声孔后,振膜的最大位移从4.8um提升到了10um,振膜位移增加了一倍。在实际应用中,一般耳机的前腔和后腔都需要开泄声孔,开孔的大小和调音网布的阻尼需要根据客户的要求以及仿真的结果进行权衡选择。接着在主界面放置电阻、电感、电容,电阻值为Rms,电感值为Mms,电容值为Cms,如下图。假设后腔泄声孔的直径为1.2mm,宽度为0.3mm,对应调音网的阻抗为5.5e8欧姆。假设前腔泄声孔的直径为1.2mm,宽度为0.3mm,对应调音网的阻抗为5.5e8欧姆。

山无忧的博客 1800

mysql truncate语句_MySQL truncate table语句

在本教程中,您将学习如何使用MySQL TRUNCATE TABLE语句删除表中的所有数据。MySQL TRUNCATE TABLE语句简介MySQL TRUNCATE TABLE语句允许您删除表中的所有数据。 因此,在功能方面,TRUNCATE TABLE语句就像没有WHERE子句的DELETE语句。 但是,在某些情况下,MySQL TRUNCATE TABLE语句比DELETE语句更有效。My...

weixin_35148271的博客 1万+

n8n AI高效工作流自动化 部署使用教程

摘要: n8n是一款开源可视化工作流自动化工具,结合AI能力可高效解决重复性任务。文章详细介绍了从Docker部署到实战应用的完整流程:1)通过Docker Compose自托管n8n,确保数据可控;2)以AI客服日报机器人为例,演示如何串联工单系统、ChatGPT和邮件通知,实现定时自动化;3)进阶搭建交互式AI助手,利用ToolsAgent节点调用业务API;4)整合向量数据库构建RAG知识库问答。关键建议包括:拆分复杂工作流、严格管理凭据、区分开发与生产环境,并建议从高频刚性需求(如日报生成)切入,逐

专注AI大模型,软件混淆,授权 266

delete、truncate语句及例题

DELETE语句 只能整行删除,不能只删除行中的某一个数据 一、语法 Single-Table Syntax DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name[.*] [, tbl_name[.*]] ...--------------------要删除的表----数据源 USING table_references ...

weixin_44569143的博客 4205

调整开关频率处理传导骚扰超标的系统方法

针对某产品在传导骚扰测试中660kHz频点超标问题,分析发现与DC-DC模块开关频率直接相关。通过调整模块开关频率至500kHz,使其避开标准限值严苛频段(0.53-1.8MHz),在不改变硬件设计的情况下实现测试通过。该案例表明,利用EMC标准的频率特性进行"频谱设计"比传统滤波手段更高效,建议在多模块系统中采用1:2:4等频率规划策略,从源头降低噪声耦合风险。这一频率迁移思路为EMC优化提供了新范式。

硬核科技 328

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

TRUNCATE语句的基本用法,值得看下哦

 清空表  如果你想删除表中所有数据,清空表,可以考虑使用DDL语言的TRUNCATE语句。TRUNCATE就像没有WHERE子句的DELETE命令一样。TRUNCATE将删除表中所有行。TRUNCATE不是DML语句是DDL语句,他和DELETE有不同的特点。TRUNCATE TABLE (schema)table DROP(REUSE) STORAGE  STORAGE子串是可选的,缺

inmyownsky1的专栏 5647

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

mysql truncate table if exists_MySQL truncate table语句

在本教程中,您将学习如何使用MySQL TRUNCATE TABLE语句删除表中的所有数据。MySQL TRUNCATE TABLE语句简介MySQL TRUNCATE TABLE语句允许您删除表中的所有数据。 因此,在功能方面,TRUNCATE TABLE语句就像没有的语句。 但是,在某些情况下,MySQL TRUNCATE TABLE语句比DELETE语句更有效。MySQL TRUNCATE ...

weixin_35697651的博客 3787

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

TRUNCATE操作与 DELETE语句的区别

TRUNCATE操作与 DELETE语句在本质上的区别 实现方式不同:TRUNCATE本质上先执行删除(DROP)数据表的操作,然后再根据有效的表结构文件(.frm)重新创建数据表的方式来实现数据清空操作而 DELETE语句则是逐条的删除数据表中保存的记录。 执行效率不同:在针对大型数据表(如千万级的数据记录)时, TRUNCATE清空数据的实现方式,决定了它比 DELETE语句删除数据的方式执行效率更高。 对AUTO_ INCREMENT的字段影响不同:TRUNCATE清空数据后,再次向表中添加数据,自

weixin_46834417的博客 3014

解释DELETE、UPDATE、TRUNCATE语句以及DROP和ALTER语句的应用。

DELETE:用于删除表中的记录,可以带条件,支持回滚。UPDATE:用于更新表中的数据,可以带条件,支持多字段更新。TRUNCATE:用于快速清空表中的所有记录,不带条件,不支持回滚。DROP:用于删除整个表或对象,不可逆,释放空间。ALTER:用于修改表的结构,如添加、删除或修改列,支持多种操作。这些语句在数据库管理中各有其特定的应用场景,理解它们的区别和适用条件对于高效地进行数据库操作至关重要。

破损的天堂鸟博客 1227

MySQL DELETE语句和TRUNCATE TABLE语句的区别

MySQL DELETE语句和TRUNCATE TABLE语句的区别 MySQL DELETE语句和TRUNCATE TABLE语句功能相似,但是二者究竟有何区别呢? DELETE可以按条件删除表中数据。 在没有条件时,DELETE FROM table1 (成功返回条数)或TRUNCATE TABLE table1(成功返回0)都是清空表。 DELETE FROM table1 WHE...

cxu123321的博客 1179

分区表truncate慢处理

truncate的实质是在不修改数据块的情况下,通过修改segment header的data_object_id,hwm,extent map,aux map等信息来实现清空表的目的,其中还涉及数据字典基表以及L1、L2位图块的修改,所以说truncate操作只是存储数据的数据块没有产生任何redo和undo,但是segment header,位图块,数据字典基表还是会产生redo和undo。当我们排查问题没有思路的时候,不妨尝试下10046跟踪去细细查看执行此语句的会话全过程,或许就会明朗了。

weixin_42575078的博客 786

TRUNCATE语句和MERGE语句

TRUNCATE语句 MERGE语句

adults的博客 2374

MySQL 删除数据 Delete 语句 、Truncate 语句

<br />恶人自有恶人磨,如果数据库里面的数据有问题了,或者是有人捣乱,再或者就是您老人家看这条数据不爽,还有就是您想毁灭证据(其实总是会留下痕迹的)的时候,你就需要了解MySQL的Delete语句了。MySQL为我们提供了delete和truncate语句来删除数据。<br />delete 语句的定义:<br />经常和数据库打交道的孩子们,删除数据的时候用的大多都是 delete 语句。现在让我们来看一下 delete语句的定义。DELETE[LOW_PRIORITY][QUICK][IGNORE]

BigBird2012的专栏 3648

mysql truncate table if exists_MySQL TRUNCATE TABLE语句介绍

Summary: in this tutorial, you will learn how to use theMySQL TRUNCATE TABLEstatement to delete all data in a table.Introduction to MySQL TRUNCATE TABLE statementThe MySQLTRUNCATE TABLEstatement al...

weixin_29611573的博客 1815

truncate表和update 效率_TRUNCATE语句时间过长的诊断

在ITPUB上看到有人提问,为什么TRUNCATE语句要比DELETE慢,由于默认TRUNCATE要回收空间,且会将所有的脏块写回到数据文件,因此其实对于小数据量而言,TRUNCATE比DELETE慢也是正常的。不过这个例子中,TRUNCATE慢的有点离谱了。这是根据问题模拟的例子,表中只有5条记录,可以看到,TRUNCATE操作要比DELETE慢得多:SQL> SET TIMING ONS...

weixin_32316643的博客 911
上一篇: MySQL ibdata1 文件“减肥”记
下一篇: 如何校验 MySQL&Oracle 时间字段合规性?
爱可生开源社区
博客等级 码龄8年 1936粉丝 1004原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值