当前位置: 首页 > news >正文

MySQL45讲 第三十六讲 为什么临时表可以重名?——阅读总结

文章目录

  • MySQL45讲 第三十六讲 为什么临时表可以重名?——阅读总结
    • 一、引言
    • 二、临时表与内存表的区别
      • (一)内存表
      • (二)临时表
    • 三、临时表的特性
      • (一)可见性与生命周期
      • (二)与普通表的关系
    • 四、临时表的应用场景
      • (一)分库分表系统的跨库查询
    • 五、临时表重名的原理
      • (一)文件存储方式
      • (二)内存中表的区分机制
    • 六、临时表与主备复制
      • (一)binlog 记录规则
      • (二)主备库临时表处理
    • 七、总结

MySQL45讲 第三十六讲 为什么临时表可以重名?——阅读总结

一、引言

在 MySQL 数据库的使用中,临时表是一个非常有用的工具。在之前优化 join 查询的文章里,我们就用到了临时表。那么,临时表到底是什么?它有哪些特性使得它适用于特定场景?


二、临时表与内存表的区别

(一)内存表

内存表使用 Memory 引擎,建表语法为 create table … engine=memory。其数据保存在内存中,系统重启时数据会被清空,但表结构依然存在。从其他特征来看,它和普通表类似。

(二)临时表

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


三、临时表的特性

(一)可见性与生命周期

  1. 一个临时表只能被创建它的 session 访问,对其他线程不可见。例如,在图 1 中,session A 创建的临时表 t,session B 无法看到。

  2. session 结束时,临时表会自动删除。

    在这里插入图片描述

(二)与普通表的关系

  1. 临时表可以与普通表同名。
  2. 当 session 内有同名的临时表和普通表时,show create 语句以及增删改查语句访问的是临时表。例如,在图 1 中,session A 创建了临时表 t 和普通表 t 后,show create table t 显示的是临时表 t 的结构。
  3. show tables 命令不显示临时表。

四、临时表的应用场景

(一)分库分表系统的跨库查询

  1. 分库分表架构
    **在分库分表场景中,常将一个大表分散到不同数据库实例上,中间层 proxy 负责解析 SQL 语句并路由到相应分表查询。**例如,将大表 ht 按字段 f 拆分成 1024 个分表分布到 32 个数据库实例上。

在这里插入图片描述

  1. 跨库查询问题与解决方案

在这里插入图片描述

对于包含分区字段 f 的等值条件查询,可直接路由到对应分表查询。但当查询条件不包含分区字段时,如 select v from ht where k>= M order by t_modified desc limit 100;,需要在所有分区查找数据后统一排序。

  • proxy 层排序:优势是处理速度快,在内存中计算,但开发工作量大,对 proxy 端压力大,易出现内存和 CPU 瓶颈。
  • 使用临时表汇总数据后排序:在汇总库创建临时表 temp_ht,包含相关字段,从各分库获取数据插入临时表后再排序查询。实际中常将临时表放到某个分库上,其查询逻辑与图 3 类似。

五、临时表重名的原理

(一)文件存储方式

  1. 执行 create temporary table 语句时,MySQL 会为 InnoDB 临时表创建 frm 文件保存表结构定义,文件存放在临时文件目录下,文件名后缀为.frm前缀是 “#sql {进程 id}_{线程 id}_序列号”,可通过 select @@tmpdir 查看临时文件目录。
  2. 在 5.6 及之前版本,会在临时文件目录下创建以.ibd 为后缀的文件存放数据;5.7 版本开始,引入临时文件表空间存放数据,不再创建 ibd 文件。由于文件名前缀规则,同名临时表在存储上被视为不同表,因此可与普通表同名创建。

(二)内存中表的区分机制

  1. 普通表的 table_def_key 由 “库名 + 表名” 构成,而临时表的 table_def_key 在 **“库名 + 表名” 基础上加入了 “server_id + thread_id”。**例如,session A 和 session B 创建的同名临时表 t1,其 table_def_key 不同,磁盘文件名也不同,所以可以并存。
  2. 每个线程维护自己的临时表链表,session 内操作表时先遍历链表,优先操作临时表,session 结束时自动删除链表里的临时表。

六、临时表与主备复制

(一)binlog 记录规则

  1. binlog_format = row 时,临时表操作不记录到 binlog 中;当 binlog_format = statment/mixed 时,会记录临时表操作。例如,主库执行包含临时表操作的语句序列时,若 binlog 为 row 格式,与临时表相关语句不会记录,若为 statment/mixed 格式,则会记录。
  2. drop table 命令记录 binlog 时会改写,如主库执行 drop table t_normal 时,binlog 中记录为 “DROP TABLE t_normal /* generated by server */”,原因是 drop table 命令可一次删除多个表,改写后可避免备库同步线程停止。

(二)主备库临时表处理

  1. 主库不同线程创建同名临时表,其操作会传到备库执行。备库应用线程执行时,根据主库执行语句的线程 id 构造临时表的 table_def_key,从而区分不同的临时表,避免冲突。
  2. 例如,主库 M 上 session A 和 session B 创建同名临时表 t1,传到备库 S 后,session A 的临时表 t1 在备库的 table_def_key 为 “库名 + t1 + M 的 serverid + session A 的 thread_id”,session B 的临时表 t1 在备库的 table_def_key 为 “库名 + t1 + M 的 serverid + session B 的 thread_id”。

七、总结

  1. 临时表适用于复杂计算逻辑场景,因其线程内可见且自动删除,无需考虑重名和收尾工作。
  2. binlog_format 的选择会影响临时表操作的记录,这在实际应用中是一个需要考虑的因素。

相关文章:

MySQL45讲 第三十六讲 为什么临时表可以重名?——阅读总结

文章目录 MySQL45讲 第三十六讲 为什么临时表可以重名?——阅读总结一、引言二、临时表与内存表的区别(一)内存表(二)临时表 三、临时表的特性(一)可见性与生命周期(二)与…...

WebRTC服务质量(11)- Pacer机制(03) IntervalBudget

WebRTC服务质量(01)- Qos概述 WebRTC服务质量(02)- RTP协议 WebRTC服务质量(03)- RTCP协议 WebRTC服务质量(04)- 重传机制(01) RTX NACK概述 WebRTC服务质量(…...

.NET常用的ORM框架及性能优劣分析总结

市面上有很多流行的 ORM(对象关系映射)框架可以用于 .NET 开发。本文主要针对以下几种常见的 ORM 框架,对其优劣进行分析及总结,希望能够帮助大家进行ORM框架的使用有所帮助。 1. Entity Framework (EF) 特点 • 官方支持&…...

Ubuntu网络配置(桥接模式, nat模式, host主机模式)

windows上安装了vmware虚拟机, vmware虚拟机上运行着ubuntu系统。windows与虚拟机可以通过三种方式进行通信。分别是桥接模式;nat模式;host模式 一、桥接模式 所谓桥接模式,也就是虚拟机与宿主机处于同一个网段, 宿主机…...

光通信复习

第一章 1.5 光纤通信系统的基本组成是怎么样的?试画出简图予以说明 光纤:主要负责光信号的传输光发送器:将用户端的电信号转化为光信号,入射到光纤内部光中继器:将光纤中发生衰减和畸变的光信号变成没有衰减和畸变的原…...

数字化转型中的投资决策:IT平台投资与业务应用投资的思考

在数字化转型的大潮中,企业常常面临一个核心问题:如何在繁杂的投资决策中精准地分配资源,特别是在IT平台投资和业务应用投资之间,如何合理划分责任与投入?在一些大型企业中,尤其是华为,针对不同…...

Linux快速入门-Linux的常用命令

Linux的常用命令 1. Linux的终端与工作区1.1 终端概述1.2 切换终端 2. Shell语言解释器2.1 Shell概述 3. 用户登录与身份切换3.1 su 命令3.2 sudo 命令 4. 文件、目录操作命令4.1 pwd 命令4.2 cd 命令4.3 ls 命令4.3.1 ls 指令叠加使用 4.4 mkdir 命令4.5 rmdir 命令4.6 cp 命令…...

【ORB-SLAM3:相机针孔模型和相机K8模型】

在ORB-SLAM3中,相机的建模是 SLAM 系统的核心之一,因为它直接影响到如何处理和利用图像数据进行定位和地图构建。ORB-SLAM3 支持不同的相机模型,其中包括针孔模型和鱼眼模型(K8 模型)。下面分别介绍这两种模型。 相机…...

Python函数(十二):函数的创建和调用、参数传递、返回值

前言:在编程的世界里,函数是一种基本的构建块,它允许我们将代码封装成可重复使用的单元。在Python中,函数的使用尤为重要,因为它不仅有助于代码的模块化,还提高了代码的可读性和可维护性。本章节&#xff0…...

掌握Docker命令与Dockerfile实战技巧:快速构建高效容器化应用

1. 介绍 Docker 是现代开发和运维的必备工具,集成了容器技术的优势。本文将记录 Docker 的常用指令,并会随着使用经验的积累进行不定期更新。 2. 常用命令 2.1 启动容器(前台交互模式) docker run --privileged --volume /hom…...

Virtualbox硬盘扩容

前言 有没有使用虚拟机安装操作系统的时候,虚拟硬盘一开始分配的虚拟硬盘空间不够用?在后期去扩容的伙伴们,下面我看看如何扩容virtualbox的虚拟硬盘? 重新分配虚拟硬盘大小 在virtualbox菜单选择【管理】-【工具】-【虚拟介质…...

10G光纤反射内存卡

在科技日新月异的今天,数据存储技术正以前所未有的速度发展,其中,“10G光纤反射内存卡”作为新一代存储技术的佼佼者,正逐步引领着数据存储领域的新风尚。本文将深入探讨这一创新产品的技术原理、性能优势、应用场景以及未来展望&…...

信创数据防泄漏中信创沙箱是什么样的安全方案

在信息化与工业化融合创新(信创)的快速发展中,企业面临着日益复杂的数据安全挑战。SDC沙盒技术以其独特的安全机制和先进的设计理念,为信创环境提供了强有力的数据保护支持。以下是SDC沙盒在信创领域支持能力的几个关键侧重点&…...

虚幻引擎结构之TArray

1.TArray 简介 TArray 是虚幻引擎提供的一个动态数组容器,用于存储相同类型的元素集合。它是一个模板类,能够容纳任意类型的数据,为用户提供了一套简便的方法来添加、删除、访问和操作数组中的元素。作为虚幻引擎的核心数据结构之一&#xff…...

【搭建一个网上商城系统】

搭建一个网上商城系统是一个复杂但有序的过程,涉及多个关键步骤。以下是一些主要的步骤: 确定运营模式 选择适合的模式:根据企业的规模、业务形态和目标市场,选择合适的电商平台运营模式,如B2C(商对客&am…...

【gopher的java学习笔记】Spring Boot Starter初探

转到java这边后,这天需要搭一个java的web service出来,如果是以前golang的话,那我就可以非常熟练的用gin搭建一个web service出来,核心逻辑就是写好一些rest接口实现后再加上最为灵魂的一句: // 启动Gin服务器在8080端…...

web服务器之云主机、物理机租用、服务器托管的区别

云主机、物理机租用和服务器托管是三种不同的Web服务器部署方式,它们各有特点,适用于不同需求的用户。以下是这三种服务的区别: 云主机(Cloud Hosting): 资源分配:基于虚拟化技术,多…...

centos制作离线安装包

目录 1.yumdownloader与repotrack怎么选择? yumdownloader --resolve repotrack 总结 2.环境准备 3.安装 1.yumdownloader与repotrack怎么选择? yumdownloader --resolve 和 repotrack 都是与 YUM(Yellowdog Updater Modified&#xf…...

论文解读——掌纹生成网络 RPG-Palm升级版PCE-Palm

该文章是2023年论文RPG-Palm的升级版 论文:PCE-Palm: Palm Crease Energy Based Two-Stage Realistic Pseudo-Palmprint Generation 作者:Jin, Jianlong and Shen, Lei and Zhang, Ruixin and Zhao, Chenglong and Jin, Ge and Zhang, Jingyun and Ding,…...

Android修行手册 - 移动端几种常用动画方案对比

Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列ChatGPT和AIGC 👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分…...

docker详细操作--未完待续

docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...

基于FPGA的PID算法学习———实现PID比例控制算法

基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...

基于服务器使用 apt 安装、配置 Nginx

🧾 一、查看可安装的 Nginx 版本 首先,你可以运行以下命令查看可用版本: apt-cache madison nginx-core输出示例: nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...

Unit 1 深度强化学习简介

Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...

实现弹窗随键盘上移居中

实现弹窗随键盘上移的核心思路 在Android中&#xff0c;可以通过监听键盘的显示和隐藏事件&#xff0c;动态调整弹窗的位置。关键点在于获取键盘高度&#xff0c;并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

Java面试专项一-准备篇

一、企业简历筛选规则 一般企业的简历筛选流程&#xff1a;首先由HR先筛选一部分简历后&#xff0c;在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如&#xff1a;Boss直聘&#xff08;招聘方平台&#xff09; 直接按照条件进行筛选 例如&#xff1a…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲

文章目录 前言第一部分&#xff1a;体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分&#xff1a;体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...

基于IDIG-GAN的小样本电机轴承故障诊断

目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) ​梯度归一化(Gradient Normalization)​​ (2) ​判别器梯度间隙正则化(Discriminator Gradient Gap Regularization)​​ (3) ​自注意力机制(Self-Attention)​​ 3. 完整损失函数 二…...

【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)

LeetCode 3309. 连接二进制表示可形成的最大数值&#xff08;中等&#xff09; 题目描述解题思路Java代码 题目描述 题目链接&#xff1a;LeetCode 3309. 连接二进制表示可形成的最大数值&#xff08;中等&#xff09; 给你一个长度为 3 的整数数组 nums。 现以某种顺序 连接…...