《MySQL——临时表》

内存表与临时表区别

临时表,一般是人手动创建。 内存表,是mysql自动创建和销毁的。

内存表,指的是使用Memory引擎的表,建表语法:create table ... engine = memeory

表的数据存在内存里,系统重启后会被清空,但是表的结构还在。

临时表,可以使用各种引擎类型。如果使用的是InnoDB或者MyISAM引擎,写数据是写在磁盘上的。当然临时表也可以使用Memory引擎。

临时表特性

1、一个临时表只能被创建它的session访问,对于其他线程不可见,当此session结束时,会自动删除临时表

2、临时表可以与普通表同名。如果同一个session里有同名的临时表和普通表,使用show create语句以及增删改查语句,访问的是临时表

3、show tables命令不显示临时表

临时表的应用

由于不用担心线程之间的重名冲突,临时表经常被用在复杂查询的优化过程中。其中,分库分表系统的跨库查询就是一个典型的使用场景。

查询语句到所有的分库中查找满足条件的行,然后统一做order by操作。

可以把各个分库拿到的数据汇总到一个MySQL实例的一个表中,然后在这个汇总实例上做逻辑操作。如下:
在这里插入图片描述

至于临时表的存储位置,可以放在分库中的某一个。

另外一个使用场景就是使用union(如果使用的是union all就不需要用了)。系统会先创建一个内部临时表,执行第一个子查询的结果放到临时表中,执行第二个子查询的结果先看看插入是否成功,成功则插入。最后从临时表中按行取数据,然后返回结果,删除临时表。

临时表可以重名的原因

无论是普通表还是临时表,一个表都会对应一个table_def_def

  • 一个普通表的table_def_def的值由"库名+表名"得到。所以在同一个库下创建两个同名的普通表,会由重复性错误。
  • 对于临时表,table_def_def在“库名+表名”的基础上还加上了“server_id + thread_id”

在实现上,每个线程都维护了自己的临时表链表,每次session内操作表的时候,先遍历链表,检查是否有这个名字的的临时表,有就优先操作,否则再操作普通表。

session结束时,对链表中的每个临时表,执行drop操作。这个操作也会被写道binlog里用于主备复制。

临时表的主备同步

row格式的binlog不会记录临时表相关语句,只有statement或者mixed格式才会记录。

创建临时表的语句会传到备库执行,因此备库的同步线程就会创建这个临时表。主库在线程退出的时候会自动删除临时表,但是备库同步线程还是在运行的,所以主库还需要写个DROP TEMPORARY TABLE传给备库。

当主库上两个session创建了同名临时表t1,这两个语句被传给备库上。

主库执行语句的线程id会被写道binlog中,备库可以用线程id构造临时表的table_def_key:

备库名 + t1 + “主库的serverid” + “session的thread_id”,所以两个表在备库的应用线程不会冲突。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/377150.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android中ActionBar的几个属性

actionBar.setHomeButtonEnabled //小于4.0版本的默认值为true的。但是在4.0及其以上是false,该方法的作用:决定左上角的图标是否可以点击。没有向左的小图标。 true 图标可以点击 false 不可以点击。 actionBar.setDisplayHomeAsUpEnabled(true) //…

drei

模拟9 T3 (COGS上也有,链接http://218.28.19.228/cogs/problem/problem.php?pid1428) 题目描述 输入a,p,求最小正整数x,使得a^x mod p 1。 分析 神奇的欧拉定理(对于gcd(a&#xf…

《MySQL——group by使用tips》

1、如果对group by语句结果没有排序要求,在语句后面加order by null 2、尽量让group by 过程用上索引,确认方法是explain结果里没有Using temporary 和Using filesort 3、如果group by 需要统计的数据量不大,尽量只使用内存临时表&#xff…

css中变量_CSS中的变量

css中变量CSS | 变数 (CSS | Variables) CSS variables allow you to create reusable values that can be used throughout a CSS document. CSS变量允许您创建可在CSS文档中使用的可重用值。 In CSS variable, function var() allows CSS variables to be accessed. 在CSS变…

位图像素的颜色 携程编程大赛hdu

位图像素的颜色 Time Limit: 2000/1000 MS (Java/Others) MemoryLimit: 32768/32768 K (Java/Others) Total Submission(s): 0 Accepted Submission(s): 0 Problem Description 有一个在位图上画出矩形程序,一开始位图都被初始化为白色(RGB颜色表示…

《MySQL——InnoDB与Memory以及临时表》

InooDB与Memory 数据组织方式不同: InnoDB引擎把数据放在主键索引上,其他索引上保存的是主键id。为索引组织表Memory引擎把数据单独存放,索引上保存数据位置。为堆组织表 典型不同处: 1、InnoDB表的数据总是有序存放的&#x…

Oracle 用户 profile 属性 转

--查看profile 内容 select * from dba_profiles where profilePF_EAGLE; --查看用户的profiles select username,profile from dba_users; --查看是否启用动态资源限制参数 SHOW PARAMETER RESOURCE_LIMIT; --启用限制 ALTER SYSTEM SET RESOURCE_LIMITTRUE SCOPEBOTH; --创建…

CUL8R的完整形式是什么?

CUL8R:稍后再见 (CUL8R: See You Later) CUL8R is an abbreviation of "See You Later". CUL8R是“稍后见”的缩写 。 It is an expression, which is commonly used in messaging or chatting on social media networking sites like Facebook, Yahoo M…

SuperSpider——打造功能强大的爬虫利器

SuperSpider——打造功能强大的爬虫利器 博文作者:加菲 发布日期:2013-12-11 阅读次数:4506 博文内容: 1.爬虫的介绍 图1-1 爬虫(spider) 网络爬虫(web spider)是一个自动的通过网络抓取互联网上的网页的程序&#xf…

《MySQL——关于grant赋权以及flush privileges》

先上总结图: 对于赋予权限或者收回权限还是创建用户,都会涉及两个操作: 1、磁盘,mysql.user表,用户行所有表示权限的字段的值的修改 2、内存,acl_users找到用户对应的对象,将access值修改 g…

对Spring的理解

1、Spring实现了工厂模式的工厂类&#xff0c;这个类名为BeanFactory实际上是一个接口&#xff0c;在程序中通常BeanFactory的子类ApplicationContext。Spring相当于一个大的工厂类&#xff0c;在其配置文件中通过<bean>元素配置用于创建实例对象的类名和实例对象的属性。…

Java中的null是什么?

As we know null is an important concept in every language not only in Java but here we will study various factors regarding null. 我们知道null在每种语言中都是重要的概念&#xff0c;不仅在Java中&#xff0c;在这里我们还将研究有关null的各种因素。 null is a ver…

《MySQL——分区表小记》

分区表的组织形式 以年份为分割方式&#xff0c;对表进行分割&#xff1a; CREATE TABLE t (ftime datetime NOT NULL,c int(11) DEFAULT NULL,KEY (ftime) ) ENGINEInnoDB DEFAULT CHARSETlatin1 PARTITION BY RANGE (YEAR(ftime)) (PARTITION p_2017 VALUES LESS THAN (201…

实战Windows下安装boost

Boost大部分组件无需编译可直接包含头文件使用&#xff0c;但还有一些库需要编译成静态库或动态库才能使用。可使用下文将提到的bjam工具&#xff1a;bjam --show-libraries 查看必须编译才能使用的库。 编译安装环境&#xff1a;Win7&#xff0c;VS2008(msvc-9.0) 1. 下载boos…

postgresq dur_DUR的完整形式是什么?

postgresq dur杜尔(DUR)&#xff1a;您还记得吗&#xff1f; (DUR?: Do You Remember?) DUR? is an abbreviation of "Do You Remember?". DUR&#xff1f; 是“您还记得吗&#xff1f;”的缩写。 。 It is an expression, which is commonly used in messaging…

gsettings-desktop-schemas : 破坏: mutter (< 3.31.4) 但是 3.28.4-0ubuntu18.04.2 正要被安装解决方案

完整报错&#xff1a; dyydyy-Lenovo-ThinkBook-14-IIL:~$ sudo apt install build-essential 正在读取软件包列表... 完成 正在分析软件包的依赖关系树 正在读取状态信息... 完成 有一些软件包无法被安装。如果您用的是 unstable 发行版&#xff0c;这也许是 因…

程序内存检测

本文参考自&#xff1a;http://www.cnblogs.com/hebeiDGL/p/3410188.html static System.Windows.Threading.DispatcherTimer dispacherTimer;static string total "DeviceTotalMemory";static string current "ApplicationCurrentMemoryUsage";static s…

动态规划天天练1

本来很久以前就打算每天练一道动态规划题的&#xff0c;但每每由于作业太多而中断&#xff0c;现在终于停课了......废话不多说&#xff0c;第一道题就给了我迎头一棒&#xff0c;不仅想了很久&#xff0c;连题解都看了很久。。。水平相当不足啊啊&#xff0c;不多说废话&#…

AAS的完整形式是什么?

AAS&#xff1a;活着和微笑 (AAS: Alive And Smiling) AAS is an abbreviation of "Alive And Smiling". AAS是“活着和微笑”的缩写 。 It is an expression, which is commonly used in messaging or chatting on social media networking sites like Facebook, Y…

《MySQL 8.0.22执行器源码分析(1)——execute iterator一些记录》

目录一条语句的函数调用栈顺序8.0使用迭代器模式改进executorint *handler*::ha_rnd_next(*uchar* **buf*)int *TableScanIterator*::Read()int FilterIterator :: Read&#xff08;&#xff09;int HashJoinIterator::Read()int NestedLoopIterator :: Read&#xff08;&#…