连接查询-mysql详解(五)

news/2024/5/16 13:14:12/文章来源:https://blog.csdn.net/ke1ying/article/details/126915602

上篇文章说了,mysql5.6.6版本之前数据默认在系统表空间,之后默认在独立表空间,innodb因为索引和数据在一个b+树,所以两个文件,一个文件结构,一个存数据,myISAM则是三个文件。一个聚簇索引有两个段,叶子段和非叶子段,一个段有他专属的区,数据刚开始存在碎片区,不属于任何段,直属表空间。

系统表空间-mysql详解(四)https://blog.csdn.net/ke1ying/article/details/126861965

Mysql访问方法

Access method的概念主要通过两种方法获取数据,第一种是全表扫描获取,第二种是通过索引获取,至于采用什么方式访问代价更低,这是mysql优化器该做的事。

Const:当我们采用主键或者唯一键的时候,速度则是最高效的,但这是建立在查询条件没查询null的情况下,如果是查询null,因为就不是唯一,会查询到多条数据,这时候效率则是ref_null。

Ref:当我们用普通索引等值查询时候,这时候效率则是ref,他的经过是先查询二级索引b+树,再回表查询主表,这就意味着回表的数据越多,效率则越低,所以取决于二次查询的数据量,太多不会采用ref,当然,查询的前提也是没有null的情况。

Ref_or_null:当我们用索引列查询null的时候,效率就没有上面的高,于是就是当前等级。

Range:前面介绍都是等值查询,当前这个是范围查询,

Index:当我们查询的条件没有符合最左索引,但是查询的列都包含复合索引,结果查询条件是从第二列开始,这时候他不会走复合索引,但是他会遍历复合索引。

All:这就是直接全表扫描。

当有两个二级索引出现的时候,一般只会用一个二级索引来查询,比如a、b两个二级索引,mysql优化器,会看哪个索引查询的数据更少,再用更少的数据来回表查询聚簇索引真实数据,查到真实数据后在过滤其他条件。

联合索引,前面刚说了当两个二级索引出现的时候,只会有一个二级索引查询,这也不是百分百的,1、如果两个二级索引都是精确查找,没有区间查找,这时候也是会触发两个二级索引查询。2、当主键id区间查找,也会触发两个索引查询。

因为单独索引mysql优化器内部会有union或和intersection且的消耗,当时使用两个索引的时候,于是联合索引肯定是更优 的选择,在时间和空间都得到提升。

连接查询

当我们连接查询的时候,就有了驱动表的概念,mysql优化器会选择代价更小的作为驱动表,也就是第一个需要查询的表,而另一个表就是被驱动表,被驱动表查询的次数取决于驱动表查询数据的多少,驱动表查询一次,查询出来的数据,再多次查询被驱动表,多少条数据则查询多少次。

连接查询分为内连接和外连接,当查询的需求是驱动表有数据,而被驱动表没有数据,这时候则需要考虑用外连接,外连接则由on关键字需要使用,表示需要查询的结果即使没有查询到,也需要放入到结果集,而where查询的过滤条件不会放入结果集。Left join则是以左边表为驱动表,right join则是右边表为驱动表。

内连接和外连接最大的区别就是on后面的过滤条件,会不会在结果集返回,内连接的on可以直接理解为where。

Nested_loop join:前面说了,驱动表查询的时候,只会访问一次,然后通过结果集查询被驱动表,这时候被驱动表会查询多次,那如果三个表四个表进行查询呢,就需要再次重复第二步操作,用结果集再次查询第三张表,依次嵌套查询下去,这个过程就像是嵌套循环,所以连接查询超过三次则会非常影响效率。

虽然被驱动表是需要查询多次的,但是也是可以走索引查询,因为mysql优化器会把sql优化成单表查询,然后走索引,当表1的a字段和表2的b字段相等的情况下,直接把驱动表表1确定常数,然后把值带入b字段单表查询表2,从而可以走索引。

Join buffer:扫描表的过程是先把磁盘上的数据刷新到内存上,然后在处理join,但实际场景中查询数据太大,这时候后面的数据磁盘io的情况下,前面的数据就需要释放。于是joinbuffer就出来了,这个参数可以用join buffer size来设置大小,他会把驱动表的结果集放入这个内存中,当然更好的效果还是在被驱动表的查询条件上加上索引,这样查询效率更高。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_9909.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小程序云开发学习笔记

小程序云开发学习笔记 初始化 在app.js里面 小程序一开始就初始化,多次调用只有第一次触发 onLaunch() { console.log("小程序打开"); wx.cloud.init({ env: ayang-8g50ew302a3a6c5a, //云开发id }) } 数据库操作 查询(一定要配置数据权限&a…

高等工程数学 —— 第一章 (1)距离与范数

前言 研一生活开始了,看了大家对我之前博客的鼓励让我知道写博客是一件多么有意义的事情。写这些让我遇见许多陌生的有缘人,有老骥伏枥的大叔、也有可爱温暖的学妹…… 这里将高等工程数学的笔记留给不爱吃香菜的月亮,希望这些陪伴过我的微光…

ElasticSearch(四)【高级查询】

四、高级查询 说明 ES中提供了一种强大的检索数据方式,这种检索方式称之为Query DSL,Query DSL是利用Rest API传递JSON格式的请求体(Request Body)数据与ES进行交互,这种方式的丰富查询语法让ES检索变得更强大&#xf…

Grafana alert预警+钉钉通知

1 Grafana alert预警 如下图所示,主要是前3步,设置alert rules、contact points 、notification policies。alert rules主要设置触发警告的规则;contact points设置通过什么发送预警,如钉钉;notification policies 将…

哲学家干饭问题 C++

哲学家干饭问题 C 哲学家就餐问题可以这样表述,假设有五位哲学家围坐在一张圆形餐桌旁,做以下两件事情之一:吃饭,或者思考。吃东西的时候,他们就停止思考,思考的时候也停止吃东西。餐桌上有五碗意大利面&am…

Vue2.0到3.0的过渡,setup,ref函数,reactive函数,计算属性computed

setup 1、Vue3.0的组件中所有用到的:数据、方法等等&#xff0c;均要配置在setup中&#xff0c;若要使用里面的数据&#xff0c;可以用return将其返回出来 2、若在setup中返回的是一个对象&#xff0c;则对象中的数据、方法、在模板中均可直接使用 例如 <template><di…

[Git] 系列三随意修改提交记录以及一些技巧

[Git] 系列三随意修改提交记录以及一些技巧 Author: Xin Pan Date: 2022.09.17 文章目录[Git] 系列三随意修改提交记录以及一些技巧整理提交记录未知提交号哈希值时怎么办&#xff1f;一些技巧本地栈式提交方法一方法二TagDescribe高级命令总结好了&#xff0c;大概总结好了。…

搭建游戏要选什么样的服务器?

服务器是游戏平台数据传输的重要载体&#xff0c;事关我们游戏创业发展的稳定性、安全性。那么&#xff0c;游戏平台搭建要选什么服务器&#xff1f;有什么参考指标&#xff1f;本文将带领大家一探究竟&#xff01; 首先是“游戏平台搭建要选择什么服务器”&#xff0c;我们可…

论文阅读_对比学习_SimCSE

英文题目&#xff1a;SimCSE: Simple Contrastive Learning of Sentence Embeddings 中文题目&#xff1a;SimSCE&#xff1a;用简单的对比学习提升句嵌入的质量 论文地址&#xff1a;https://export.arxiv.org/pdf/2104.08821.pdf 领域&#xff1a;自然语言处理&#xff0c;对…

Redis的基本使用

1.Redis简介 &#xff08;1&#xff09;什么是Redis ①Redis是一个基于内存的key-value结构数据库 ②基于内存存储&#xff0c;读写性能高 ③适合存储热点数据(热点商品、资讯、新闻) ④Redis是一个开源的内存中的数据结构存储系统&#xff0c;它可以用作&#xff1a;数据库、…

计组--存储系统

存储系统 思维导图&#xff1a; 存储器概述 存储器的分类 按在计算机中的作用(层次)分类 主存储器&#xff0c;简称主存(内存) 存放计算机运行期间所需的程序和数据&#xff0c;CPU可以直接对其进行访问。 辅助存储器&#xff0c;简称辅存(外存) 辅存的内容需要调入主存后才…

普中A6开发版——XPT2046四引脚切换测量(含详细教程以及原理图等资料)

文章目录一、简介二、原理图以及手册三、接线四、选择数码管芯片原理讲解五、代码一、简介 本文介绍了XPT2046的使用方法以及普中A6开发版的接线等&#xff0c;并从原理图以及手册中摘选了详细的介绍&#xff0c;充分理解其工作原理。XPT2046本来是一个电阻式触摸屏控制器&…

监控系统架构方案

前言 对于企业级服务器管理&#xff0c;站群管理&#xff0c;针对服务器的监控是非常必要的。 通常&#xff0c;在电脑出现卡死&#xff0c;或进程停止或被挂起的情况下&#xff0c;大家都会使用任务管理器查看进程情况。针对电脑流畅性或资源优化&#xff0c;通常会使用资源管…

物联网开发笔记(19)- 使用Micropython开发ESP32开发板之连接WIFI热点

我们的ESP32开发板是拥有WIFI和蓝牙功能的。这里我们先告诉大家如何将ESP32开发板连接到我们家里的无线路由器上&#xff0c;并和连接到家里无线路由器的一台电脑进行通讯。 一、环境 ESP32开发板Thonny IDEWin10网络调试助手工具 后面设备联网的基本信息&#xff1a;开发板IP…

网课答案查题方法详细步骤

网课答案查题方法详细步骤 本平台优点&#xff1a; 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a; 题库&#xff1a;题库后台&#xff08;点击跳转&#…

Dobbo微服务项目实战(详细介绍+案例源码) - 1.项目介绍及环境配置

系列文章目录 项目介绍及环境配置 文章目录系列文章目录一、项目介绍1. 功能2. 技术选型3. 页面预览⑴. 登录⑵. 交友&#xff08;主页&#xff09;⑶. 探花⑷. 搜附件⑸. 桃花传音⑹. 测灵魂⑺. 圈子⑻. 消息⑼. 小视频⑽. 我的二、开发工具1. YAPI2. Android模拟器3. 调试工…

ElasticSearch 命令总结

目录0&#xff0c;ES 与关系型数据库类比1&#xff0c;查看集群信息2&#xff0c;查看索引信息3&#xff0c;创建索引1&#xff0c;创建索引2&#xff0c;重建索引4&#xff0c;文档相关操作1&#xff0c;查看文档2&#xff0c;写入文档3&#xff0c;更新文档4&#xff0c;删除…

上海亚商投顾:A股持续调整 券商成做空主力

上海亚商投顾前言&#xff1a;无惧大盘大跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 市场情绪三大指数今日低开低走&#xff0c;午后均跌超2%&#xff0c;证券、房地产、煤炭等板块跌幅居前。券商股全线下挫&am…

centos8升级宝塔导致的openssl系列问题

故事的发生是这样的&#xff0c;从前有座山 这个问题很古怪&#xff0c;起先是我把宝塔面板从7.9.3升级到7.9.4&#xff0c;结果升级后宝塔弹出 libk5crypto.so.3: undefined symbol: EVP_KDF_ctrl, version OPENSSL_1_1_1b 再后来就是重启的话&#xff0c;连ssh都进不去&…

第137篇 荷兰拍卖

介绍荷兰拍卖,并通过简化版Azuki荷兰拍卖代码,讲解如何通过荷兰拍卖发售 ERC721标准的NFT。 1.荷兰拍卖 荷兰拍卖(Dutch Auction)是一种特殊的拍卖形式。 亦称“减价拍卖”,它是指拍卖标的的竞价由高到低依次递减直到第一个竞买人应价(达到或超过底价)时击槌成交的一种…