MySQL临时表

作者: 慧鑫coming | 来源:发表于2019-02-05 22:36 被阅读0次
临时表在使用上的几个特点:
  • 建表语法 create temporary table ...;
  • 一个临时表只能被创建它的session访问,对其他线程不可见;
  • 临时表名可以与普通表相同;
  • 一个session内有同名的临时表和普通表时,show create table 语句,以及增删改查语句(查询语句)访问的是临时表;
  • show tables 命令不显示临时表;
  • session结束时,会自动删除session内的临时表。
临时表的应用
  • 复杂查询的优化过程(典型应用场景:分库分表系统的跨库查询)
为什么临时表可以重名
  • 临时表结构存储:InnoDB表通过创建一个frm文件保存表结构定义,通过select @@tmpdir可以找到保存目录;它的命名规则是“#sql{进程 id}_{线程 id}_序列号”
  • 临时表数据存储:
    1.5.6及之前的版本,在MySQL临时文件目录下创建一个同frm文件相同前缀、以.ibd为后缀的文件,存放数据文件;
    2.从5.7开始,引入一个临时文件表空间,专门用来存放临时文件的数据,无需再创建ibd文件了。
  • MySQL维护数据表,除物理上要有文件外,内存里也有一套机制区别不同的表,每个表都对应一个table_def_key
    1.普通表的table_def_key值是“库名+表名”;
    2.临时表table_def_key在“库名+表名”基础上又加入了“server_id+thread_id”,所以同一session下临时表名可以和普通表名相同;同时也能解决主备复制不同session临时表同名问题。
  • 每个线程都有自己的临时表链表,每次session内操作表的时候,先遍历链表,检查是否有这个名字的临时表,如果有就优先操作临时表,如果没有再操作普通表;在session结束时对链表里的每个临时表,执行“DROP TEMPORARY TABLE + 表名”的操作。
临时表对主备复制的影响
  • 在binlog_format=statement/mixed的时候,临时表的操作会记录到binlog中;在binlog_format=row时,跟临时表有关的语句不会被记录到binlog中。
  • 在statement/mixed格式下,创建临时表的语句会传到备库执行,备库的同步线程会创建这个临时表。主库在线程退出的时候,会自动删除临时表,但是备库同步线程是持续进行的。所以这个时候需要在主库上写一个DROP TEMPORARY TABLE 传给备库执行。
  • 在binlog_format=row时,如果删除主库上的临时表,那么在传给备库之前,会将删除临时表的命令删除,并改写语句加上/* generated by server */ 说明了这是一个被服务端改写过的命令。

相关文章

  • mysq临时表

    MySQL 临时表 MySQL 临时表在我们需要保存一些临时数据时是非常有用的。临时表只在当前连接可见,当关闭连接...

  • MySQL 临时表

    临时表只在当前连接可见,当关闭连接时,Mysql会自动删除表并释放所有空间。 使用PHP脚本来创建MySQL临时表...

  • mysql 临时表

    EXPLAIN 执行计划中 Extra中有包含using temptable的话就会创建临时表。

  • MYSQL临时表

    1.简介: 用于临时存储大量数据子集的查询结果,经行临时存储以便下一步处理; 相对于执行若干次查询操作每次经行SQ...

  • MySQL临时表

    临时表在使用上的几个特点: 建表语法 create temporary table ...; 一个临时表只能被创...

  • MySQL在什么情况下会使用到临时表

    MySQL 在什么情况下会使用到临时表 MySQL在执行SQL查询时可能会用到临时表,一般情况下,用到临时表就意味...

  • MySQL快速创建千万测试数据

    mysql版本 8.0.21 创建基础表 使用存储过程造数据(不推荐) 采用临时表 4.1 创建临时表 4.2 生...

  • MySQL 存储引擎——MyISAM

    MySQL 大部分系统表、临时表都是使用的 MyISAM 存储引擎,临时表不是通过 create temporar...

  • Mysql 临时表 视图

    参考 https://www.jianshu.com/p/01b9f028d9c7 临时表的特性 临时表只在当前连...

  • MySQL的临时表

    内存表与临时表的区别 内存表,指的是使用 Memory 引擎的表,建表语法是 create table … eng...

网友评论

    本文标题:MySQL临时表

    本文链接:https://www.haomeiwen.com/subject/nbwmsqtx.html