【MySQL】驱动表、被驱动表详解。—— 性能优化。

embedded/2024/10/18 2:40:10/

文章目录

  • 什么是 驱动表 和 被驱动表?
  • 哪个表是驱动表?
  • 性能优化建议:

我是一名立志把细节都说清楚的博主,欢迎【关注】🎉 ~

原创不易, 如果有帮助 ,记得【点赞】【收藏】 哦~ ❥(^_-)~

如有错误、疑惑,欢迎【评论】指正探讨,我会尽可能第一时间回复的,谢谢支持


什么是 驱动表 和 被驱动表?

在2个表或2个以上表的连接查询中(多数涉及关键字 JOIN ),才会涉及 驱动表被驱动表

在使用多表嵌套连接时,首先,会全表扫描该一个表作为查询条件,这个表叫做 驱动表。然后用驱动表返回的结果集逐行去匹配的表,叫做 被驱动表


哪个表是驱动表?

  • 驱动表是由 MySQL 优化器选择的
  • 我们只能通过理解优化器的选择倾向,让某个表更接近优化器的选择标准,让这个表尽可能的成为驱动表。

优化器选择驱动表的原则是:让查询的性能更好。 基于这个原则,可以从以下几个方面考虑:

  • 小表优先: 因为驱动表会被全表扫描,所以优先选择小表作为驱动表。全表扫描的效率更高。
  • 有where条件的优先: 优化器优先选择有过滤条件的表作为驱动表,能够减少部分匹配操作。
  • 连接类型:
    • LEFT JOIN / LEFT OUTER JOIN:这两个关键字会返回左表中的所有的记录(符合驱动表全表扫描的特性),而右表的匹配记录是可选的。所以会优先选择左表为驱动表。
    • RIGHT JOIN / RIGHT OUTER JOIN:优先选择右表作为驱动表,原理同上。
    • INNER JOIN:优化器会评估执行计划中表的扫描次数,需要扫描次数更少的表优先作为驱动表。

性能优化建议:

我们应该有意识的调整驱动表更符合MySQL 优化器的选择标准。

  • 尽可能使用小表作为驱动表。驱动表因为要被全表扫描,所以我们在选择上,我们应该尽量选择小表作为驱动表(至少是相对小表)。
  • 更具需要增加筛选条件,减少部分匹配操作。
  • 根据连接类型的特点调整驱动表的位置。 让驱动表符合不同连接查询选择驱动表的倾向。
  • 被驱动表使用索引。 被驱动的表通常是大表,对于大表,我们可以使用索引优化查询效率。

我是一名立志把细节都说清楚的博主,欢迎【关注】🎉 ~

原创不易, 如果有帮助 ,记得【点赞】【收藏】 哦~ ❥(^_-)~

如有错误、疑惑 ,欢迎【评论】指正探讨,我会尽可能第一时间回复的,谢谢支持


http://www.ppmy.cn/embedded/27995.html

相关文章

Swift手撸轮播效果

一、创建ScrollView objcMembers class LSLottieAnimView: UIView, UIScrollViewDelegate {private var scrollView: UIScrollView UIScrollView()func addScrollView() {scrollView.showsHorizontalScrollIndicator falsescrollView.isPagingEnabled true// 自定义framesc…

【go零基础】go-zero从零基础学习到实战教程 - 2项目初始化

到项目初始化过程了,这边的项目设计完全按照作者自己的喜好来进行定义和设置的,所以各位完全可以按照自己的偏好自喜设置哈。 首先是创建一个工作文件夹哈。 别问为啥不直接quickstart,因为quickstart生成的api名字是greet,改起来…

Django后台项目开发实战七

为后台管理系统换风格 第七阶段 安装皮肤包 pip install django-grappelli 在 setting.py 注册 INSTALLED_APPS [grappelli,django.contrib.admin,django.contrib.auth,django.contrib.contenttypes,django.contrib.sessions,django.contrib.messages,django.contrib.stat…

蓝桥杯2022年第十三届决赛真题-最大数字

知识点: double -------(max)10的308次幂 long long ---------(max)10的18次幂 过 96% 的方法 贪心思想:根据数据范围,很容易想到应该用for遍历每一位,复杂度是O(1)。从前往后看每一位,比较通过到达9和通过-到达9的个…

图像处理的一些操作(2)

图像处理 9. 转换类型9.1转换成浮点数类型9.2转换成无符号字节类型 10.颜色空间转换10.1RGB转GRAY10.2RGB转HSV10.3RGB转LAB10.4HSV转RGB10.5LAB转RGB10.6 convert_colorspace函数进行颜色转换 11.标签化处理图像11.1导入模块11.2加载图片11.3RGB图像转灰度图像11.4遍历图像11.…

springcloud第4季 springcloud-alibaba之分布式事务seata

一 seata介绍 1.1 seata介绍 1.seata是一款解决分布式事务的解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。 二 seata的操作 2.1 seata操作 1.seata的安装 2.seata数据库导入脚本 3.seata的server配置安装

基于SSM的个人博客系统(五)

前面内容请移步 基于SSM的个人博客系统(四) 个人博客系统的设计与实现免费源码论文 个人博客系统的设计与实现毕业设计论文源码 第六章 系统测试 6.1 前台模块测试 浏览器的网址输入框中输入正确的地址既可以看到系统前台页面: 图5-1前台展示页面 …

JMeter性能压测脚本录制

第一步:电脑打开控制面板设置代理服务器 第二步:jmeter的测试计划添加一个HTTP(S)脚本记录器 在脚本记录器里配置好信息,然后保存为脚本文件(.*表示限定) 此方框内容为项目地址(可改…