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

news/2024/12/26 13:56:11/

文章目录

  • 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 的选择会影响临时表操作的记录,这在实际应用中是一个需要考虑的因素。

http://www.ppmy.cn/news/1558282.html

相关文章

AI应用-本地模型实现AI生成PPT(简易版)

文章目录 前言技术栈效果展示 一、实现思路二、实现步骤1.本地安装marp-cli2.后端实现3.前端实现 三、代码地址及说明 前言 在许多项目中,生成 PPT 是常见的需求,尤其在教育和报告展示中。传统的生成 PPT 的方法需要手动创建,而使用生成模型…

【微信小程序】3|首页搜索框 | 我的咖啡店-综合实训

首页-搜索框-跳转 引言 在微信小程序中,首页的搜索框是用户交互的重要入口。本文将通过“我的咖啡店”小程序的首页搜索框实现,详细介绍如何在微信小程序中创建和处理搜索框的交互。 1. 搜索函数实现 onClickInput函数在用户点击搜索框时触发&#x…

Elasticsearch filter context 的使用原理

ES querycache 加速匹配的方法 前言 ES 进行信息检索的时候,boolean 查询组合条件有 must/must_not/should/filter 四个操作。其中 must 和 filter 的用途都是用于过滤必要符合的条件,但是 filter 在查询过程中不算分并且可以进行缓存,这样…

分布式调度框架学习笔记

一、分布式调度框架的基本设计 二、线程池线程数量设置的基本逻辑 cpu是分时复用的方法,线程是cpu调度的最小单元 如果当前cpu核数是n,计算密集型线程数一般设为n,io密集型(包括磁盘io和网络io)线程数一般设置为2n. 计算密集型线程数一般设…

光谱相机的工作原理

光谱相机的工作原理主要基于不同物质对不同波长光的吸收、反射和透射特性存在差异,以下是其具体工作过程: 一、光的收集 目标物体在光源照射下,其表面会对光产生吸收、反射和透射等相互作用。光谱相机的光学系统(如透镜、反射镜…

瑞吉外卖项目学习笔记(九)套餐列表分页查询、新增套餐、图片上传和下载

瑞吉外卖项目学习笔记(一)准备工作、员工登录功能实现 瑞吉外卖项目学习笔记(二)Swagger、logback、表单校验和参数打印功能的实现 瑞吉外卖项目学习笔记(三)过滤器实现登录校验、添加员工、分页查询员工信息 瑞吉外卖项目学习笔记(四)TableField(fill FieldFill.INSERT)公共字…

【NLP 18、新词发现和TF·IDF】

目录 一、新词发现 1.新词发现的衡量标准 ① 内部稳固 ② 外部多变 2.示例 ① 初始化类 NewWordDetect ② 加载语料信息,并进行统计 ③ 统计指定长度的词频及其左右邻居字符词频 ④ 计算熵 ⑤ 计算左右熵 ​编辑 ⑥ 统计词长总数 ⑦ 计算互信息 ⑧ 计算每个词…

网络安全 | 云计算中的数据加密与访问控制

网络安全 | 云计算中的数据加密与访问控制 一、前言二、云计算概述2.1 云计算的定义与特点2.2 云计算的服务模式2.3 云计算的数据安全挑战 三、数据加密技术在云计算中的应用3.1 对称加密算法3.2 非对称加密算法3.3 混合加密算法 四、云计算中的访问控制模型4.1 基于角色的访问…