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

到底可不可以用jion?jion如何优化?

前言

jion其实是可以使用的 但是一定要选择小表作为驱动表。


到底可不可以用jion?jion如何优化?

  • 前言
  • jion的执行过程涉及到两个算法
    • 一个是simple nested
    • 另一个算法是Black nested
  • jion语句优化
  • MRR优化
  • 如果一个查询,被驱动表很大且都是冷数据,那么会导致什么问题呢?

jion的执行过程涉及到两个算法

一个是simple nested

A表有N行,B表有M行
假设是 dbA jion dbB on dbA.a =dbB.a

如果在B表的a字段上有索引,那么执行流程就是,扫描B表,然后扫描B表的索引拿到结果,在索引上找到一个数据基本是log2的
扫描行数为 N+Nlog2的M次方。
因此驱动表越小 效率越高。
如果没有索引的话 就需要M
N次查询了。

另一个算法是Black nested

如果NM 很大。MySQL并不会这么运行,而是使用Black nested 。
执行流程是,先把A表的数据放到jion_buffer中,然后取出B表数据做一一对比。
这个过程在内存中效率会高一些。
如果jion_buffer_size设置大小不够放下A表。就会分多次x对比。这样多等值对比的次数还是N
M
但是需要扫描B表x次。
x与N呈现正相关。
因此总数为N+N的某种正相关*M
因此也是小表做驱动表更快。

jion语句优化

MRR优化

首先理解MRR优化,就是虽然在普通索引上去主键索引上查找的时候是一个一个查询的。

但是如果查询之间是有顺序的,那么也会加快查询,
因此如果在查询之前添加了一个排序,一般主键索引都是单调递增的。

所以排序之后,可以更快的查询。

利用这个思想:jion查询时simple nested 可以将驱动表的结构排序之后,再到被驱动表里查询会加快查询。这种方式称为ack。

那么对于black nested如何优化呢,就是变成ack,通过加索引或者改造sql或者通过业务侧分开查询创建hash来实现。

如果一个查询,被驱动表很大且都是冷数据,那么会导致什么问题呢?

  1. 会有大量io操作,影响性能

  2. 会导致buffer_pool失效,因为如果3/8分区时,jion之后被驱动表可能会在一秒内进行多次扫描,导致冷数据替换掉了3的部分,导致整个缓存命中率下降。

  3. 进行N*M次对比,占用cpu资源。

http://www.lryc.cn/news/598218.html

相关文章:

  • 【学习】数字化车间与智能工厂如何推进制造业转型
  • MIT线性代数02_矩阵消元
  • 云祺容灾备份系统AWS S3对象存储备份与恢复实操手册
  • 电商项目_秒杀_架构升级
  • 4G手机控车模块的核心功能与应用价值
  • 告别束缚:这款“隐形心电监测仪”让心脏健康管理更自由
  • Oracle 时间处理函数和操作符笔记
  • Python-初学openCV——图像预处理(二)
  • 服务器带宽具体是指什么意思?
  • 硅基计划3.0 学习总结 贰 顺序表与链表
  • 图论:搜索问题
  • 深度分析Android多线程编程
  • Leetcode力扣解题记录--第2题(加法模拟)
  • ESP32S3 Ubuntu vscode如何使用USB-JTAG调试
  • 【开源】WPF的数据可视化大屏解决方案——WpfMap
  • C++课设实践项目:C++构建的学籍管理系统
  • Cisco 主模式配置
  • SGLang + 分布式推理部署DeepSeek671B满血版
  • JavaSE:开发环境的搭建(Eclipse)
  • Java与NLP实战:文本处理到情感分析全解析
  • 【ECharts✨】解决Vue 中 v-show 导致组件 ECharts 样式异常问题
  • [AI 生成] Flink 面试题
  • 【论文阅读】REVISITING DEEP AUDIO-TEXT RETRIEVAL THROUGH THE LENS OF TRANSPORTATION
  • 基于SpringBoot+Uniapp的健身饮食小程序(协同过滤算法、地图组件)
  • 人形机器人加快先进AI机器人开发
  • 开发避坑短篇(5):vue el-date-picker 设置默认开始结束时间
  • 实时云渲染将UE像素流嵌入业务系统,实现二维管理系统与数字孪生三维可视化程序的无缝交互
  • 小程序生命周期及页面操作执行过程详解
  • 使用phpstudy极简快速安装mysql
  • Java进阶3:Java集合框架、ArrayList、LinkedList、HashSet、HashMap和他们的迭代器