truncate table须知

简介:

背景

最近在排查问题的时候遇到truncate table阻塞了业务语句获取MDL锁,为此记录下truncate table的东东以备后用

执行权限

drop table

SQL类型

DDL而不是DML,为什么会这样归类呢?

  • 先drop再create
    这样清理表会快些,特别是对大表来说
  • 会带来隐式提交,且不能回滚
    会带来隐式的还有https://dev.mysql.com/doc/refman/5.6/en/implicit-commit.html
  • 遇到其他session持有活动的表锁该操作不会被执行
  • 对于跟其他表有关联外键的InnoDB和NDB表,truncate table会失败
  • truncate table 不像delete一样可以返回实际修改了多少行
  • 对于自增值AUTO_INCREMENT会被归0
  • 只要表名合法,即使数据或索引文件被破坏的情况下,这个表可以被重新创建成一张空表。
  • 对于分区表,truncate table之后还是保留分区结构,这是因为虽然数据文件和索引文件被drop然后重新创建,但是分区表定义文件(.par)不受影响
  • truncate table不会唤醒DELETE触发器
  1. table 会关闭所有已经打开的该表的文件句柄。

binlog日志

在binlog日志里面,对于InnoDB表或其他支持事务的引擎来说是先drop再create记录的,而对于基于STATEMENT或者MIXED复制模式不会被记录。

注意事项

如果一个系统的innodb buffer pool比较大并且开启了innodb_adaptive_hash_index ,truncate table 可能会引起暂时的性能下降,因为当删除InnoDB表的自适应hash簇时需要遍历LRU链表。

参考

https://dev.mysql.com/doc/refman/5.6/en/truncate-table.html

相关文章
|
关系型数据库 MySQL 数据库
对于mysql数据库delect from,truncate table,drop table, update操作的时候如何选择
对于mysql数据库delect from,truncate table,drop table, update操作的时候如何选择
198 2
|
6月前
|
分布式计算 MaxCompute 开发工具
在MaxCompute中,使用`CREATE TEMPORARY TABLE`语句创建的临时表
【2月更文挑战第18天】在MaxCompute中,使用`CREATE TEMPORARY TABLE`语句创建的临时表
310 3
|
3月前
|
传感器 搜索推荐 人机交互
虚拟现实中的人机交互设计:探索未来交互的无限可能
【8月更文挑战第26天】虚拟现实中的人机交互设计是一项充满挑战与机遇的技术领域。随着技术的不断进步和应用场景的不断拓展,我们有理由相信未来VR人机交互将更加自然、直观和个性化。设计师需要不断探索和创新以应对各种技术挑战和用户需求变化,为用户带来更加丰富和愉悦的交互体验。
|
6月前
|
SQL 存储 JSON
Hive 解析 JSON 字符串数据的实现方式
Hive 提供 `get_json_object` 函数解析 JSON 字符串,如 `{"database":"maxwell"}`。`path` 参数使用 `$`、`.`、`[]` 和 `*` 来提取数据。示例中展示了如何解析复杂 JSON 并存储到表中。此外,Hive 3.0.0及以上版本内置 `JsonSerDe` 支持直接处理 JSON 文件,无需手动解析。创建表时指定 `JsonSerDe` 序列化器,并在 HDFS 上存放 JSON 文件,可以直接查询字段内容,方便快捷。
361 3
|
消息中间件 Java 中间件
RocketMQ延迟消息的代码实战及原理分析
在RocketMQ中,支持延迟消息,但是不支持任意时间精度的延迟消息,只支持特定级别的延迟消息。如果要支持任意时间精度,不能避免在Broker层面做消息排序,再涉及到持久化的考量,那么消息排序就不可避免产生巨大的性能开销。
3239 0
|
6月前
|
搜索推荐 算法 安全
AIGC对未来高校教学的影响
【1月更文挑战第14天】AIGC对未来高校教学的影响
224 3
AIGC对未来高校教学的影响
|
SQL 关系型数据库 MySQL
开发指南—DDL语句—分区表语法—DROP TABLE
您可以使用DROP TABLE语法删除指定表。
100 0
|
SQL 关系型数据库 MySQL
【笔记】开发指南—DDL语句—分区表语法—ALTER TABLE
您可以通过ALTER TABLE语法改变表的结构,如增加列、增加索引、修改数据定义等
|
Oracle Java 关系型数据库
Linux 安装 Maven
Linux 安装 Maven
7791 1