《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,一经查实,立即删除!

相关文章

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…

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变…

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…

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

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

strcspn函数

函数原型&#xff1a;extern int strcspn(char *str1,char *str2) 参数说明&#xff1a;str1为参照字符串&#xff0c;即str2中每个字符分别与str1中的每个字符比较。 所在库名&#xff1a;#include <string.h> 函数功能&#xff1a;以str1为参照&#xff0c…

MongoDB源码概述——内存管理和存储引擎

数据存储&#xff1a; 之前在介绍Journal的时候有说到为什么MongoDB会先把数据放入内存&#xff0c;而不是直接持久化到数据库存储文件&#xff0c;这与MongoDB对数据库记录文件的存储管理操作有关。MongoDB采用操作系统底层提供的内存文件映射&#xff08;MMap&#xff09;的方…

SharePoint 2010 Form Authentication (SQL) based on existing database

博客地址 http://blog.csdn.net/foxdaveSharePoint 2010 表单认证&#xff0c;基于现有数据库的用户信息表本文主要描述本人配置过程中涉及到的步骤&#xff0c;仅作为参考&#xff0c;不要仅限于此步骤。另外本文通俗易懂&#xff0c;适合大众口味儿。I. 开启并配置基于声明的…

小狐狸ChatGPT系统 不同老版本升级至新版数据库结构同步教程

最新版2.6.7下载&#xff1a;https://download.csdn.net/download/mo3408/88656497 小狐狸GPT付费体验系统如何升级&#xff0c;该系统更新比较频繁&#xff0c;也造成了特别有用户数据情况下升级时麻烦&#xff0c;特别针对会员关心的问题出一篇操作教程&#xff0c;本次教程…

HDUOJ---1754 I Hate It (线段树之单点更新查区间最大值)

I Hate It Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 33469 Accepted Submission(s): 13168 Problem Description很多学校流行一种比较的习惯。老师们很喜欢询问&#xff0c;从某某到某某当中&#xff0c;…

C# 把数字转换成链表

例如&#xff1a;123456转换成 1 -> 2 -> 3-> 4-> 5-> 6 View Code static LinkedList<int> CovertIntToLinkedList(int num){Stack<int> stack new Stack<int>();LinkedList<int> result new LinkedList<int>();while (num!0…

《MySQL 8.0.22执行器源码分析(4.1)Item_sum类以及聚合》

Item_sum类用于SQL聚合函数的特殊表达式基类。 这些表达式是在聚合函数&#xff08;sum、max&#xff09;等帮助下形成的。item_sum类也是window函数的基类。 聚合函数&#xff08;Aggregate Function&#xff09;实现的大部分代码在item_sum.h和item_sum.cc 聚合函数限制 不…

Java 性能优化实战记录(2)---句柄泄漏和监控

前言: Java不存在内存泄漏, 但存在过期引用以及资源泄漏. (个人看法, 请大牛指正) 这边对文件句柄泄漏的场景进行下模拟, 并对此做下简单的分析.如下代码为模拟一个服务进程, 忽略了句柄关闭, 造成不能继续正常服务的小场景. 1 public class FileHandleLeakExample {2 3 p…

骑士游历问题问题_骑士步行问题

骑士游历问题问题Problem Statement: 问题陈述&#xff1a; There is a chessboard of size NM and starting position (sx, sy) and destination position (dx,dy). You have to find out how many minimum numbers of moves a knight goes to that destination position? 有…

Android基础之用Eclipse搭建Android开发环境和创建第一个Android项目(Windows平台)...

一、搭建Android开发环境 准备工作&#xff1a;下载Eclipse、JDK、Android SDK、ADT插件 下载地址&#xff1a;Eclipse:http://www.eclipse.org/downloads/ JDK&#xff1a;http://www.oracle.com/technetwork/java/javase/downloads/jdk7u9-downloads-1859576.html Android SD…

《dp补卡——01背包问题》

目录01背包[416. 分割等和子集](https://leetcode-cn.com/problems/partition-equal-subset-sum/)[1049. 最后一块石头的重量 II](https://leetcode-cn.com/problems/last-stone-weight-ii/)[494. 目标和](https://leetcode-cn.com/problems/target-sum/)01背包 1、dp数组以及…

用JavaScript往DIV动态添加内容

参考&#xff1a;http://zhidao.baidu.com/link?url6jSchyqPiEYCBoKdOmv52YHz9r7MTBms2pK1N6ptOX1kaR2eg320mlW1Sr6n36hpOeOadBxC2rWWGuhZPbms-K <div id"show"></div>要填充的数据为: 这是一个测试例子.jquery&#xff1a;$(function(){ var data …

《dp补卡——完全背包问题》

N件物品和一个最多能背重量为W的背包。第i件物品的重量为weight[i]&#xff0c;得到的价值是value[i]。每件物品都有无限个(可以放入背包多次)&#xff0c;求解将哪些物品装入背包里物品价值总和最大。 01背包和完全背包唯一不同在于遍历顺序上。 01背包的核心代码&#xff1a…

《dp补卡——多重背包》

多重背包简介&#xff1a; 有N种物品和一个容量为V的背包。第i种物品最多有Mi件可用&#xff0c;每件耗费的空间为Ci&#xff0c;价值为Wi。求解将哪些物品装入背包可使得这些物品耗费的空间总和不超过背包容量&#xff0c;且价值总和最大。 将Mi件摊开&#xff0c;就是一个01背…

CocoaAsyncSocket 套接字

CocoaAsyncSocket 套接字 https://github.com/robbiehanson/CocoaAsyncSocket Asynchronous socket networking library for Mac and iOS 用于iOS以及Mac的异步套接字网络库。 TCP GCDAsyncSocket and AsyncSocket are TCP/IP socket networking libraries. Here are the key…