问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

MySQL连接查询到底什么是驱动表?看了这个你应该就明白了

发布网友 发布时间:2024-10-02 01:53

我来回答

1个回答

热心网友 时间:2024-10-18 16:41

准备我们需要的表结构和数据

两张表 studnet(学生)表和score(成绩)表,创建表的SQL语句如下

MySQL连接查询分为以下三种

left join 左连接,用法如下,这种查询会把左表(student)所有数据查询出来,右表不存在的用空表示,结果图如下

right join 右连接, 用法如下,这种查询会把右表(score)所有数据查询出来,左表不存在的用空表示,结果图如下

inner join 内连接,用法如下,这种查询会把左右表都存在的数据查询出来,不存在数据忽略,结果图如下

连接查询中需要注意的点

什么是驱动表,什么是被驱动表,这两个概念在查询中有时容易让人搞混,有下面几种情况,大家需要了解。

怎么确定我们上面的两种情况呢,执行计划是不会骗人的,我们针对上面情况分别看看执行计划给出的答案

首先第一种情况,student表中3条数据,score表中2条数据,但两张表中只有一条数据是关联的(编号是1),看如下SQL查询

执行计划中靠前的表是驱动表,我们看下面三种图中,是不是全度符合情况一,第一张图中s1是驱动表,第二张图中s2是驱动表,第三种途中s2是驱动表

其次第二种情况,还是上面三种SQL语句,我们分别加上where条件,再来看看执行计划的结果是什么样呢?

我们看下面三种执行计划结果,全都以where条件为准了,而且跟上面情况一的都相反了,因此情况二也是得到了验证.

连接查询优化

要理解连接查询优化,得先理解连接查询的算法,连接查询常用的一共有两种算法,我们简要说明一下

Simple Nested-Loop Join Algorithms(简单嵌套循环连接算法)

比如上面的查询中,我们确定了驱动表和被驱动表,那么查询过程如下,很简单,就是双重循环,从驱动表中循环获取每一行数据,再在被驱动表匹配满足条件的行。

Index Nested-Loop Join Algorithms(索引嵌套循环连接算法)

上面双重for循环的查询中,相信很多研发人员看到这种情况第一个想法就是性能问题,是的,join查询的优化思路就是小表驱动大表,而且在大表上创建索引(也就是被动表创建索引),如果驱动表创建了索引,MySQL是不会使用的

Block Nested-Loop Join Algorithm(基于块的连接嵌套循环算法)

其实很简单就是把一行变成了一批,块嵌套循环(BNL)嵌套算法使用对在外部循环中读取的行进行缓冲,以减少必须读取内部循环中的表的次数。例如,如果将10行读入缓冲区并将缓冲区传递到下一个内部循环,则可以将内部循环中读取的每一行与缓冲区中的所有10行进行比较。这将内部表必须读取的次数减少了一个数量级。

MySQL连接缓冲区大小通过这个参数控制:join_buffer_size

MySQL连接缓冲区有一些特征,只有无法使用索引时才会使用连接缓冲区;联接中只有感兴趣的列存储在其联接缓冲区中,而不是整个行;为每个可以缓冲的连接分配一个缓冲区,因此可以使用多个连接缓冲区来处理给定查询;在执行连接之前分配连接缓冲区,并在查询完成后释放连接缓冲区

所以查询时最好不要把 * 作为查询的字段,而是需要什么字段查询什么字段,这样缓冲区能够缓冲足够多的行。

从上面的执行计划中其实我们已经看到了 useing join buffer了,是的,那是因为我们对两张表都有创建索引

三种算法优先级

第一种算法忽略,MySQL不会采用这种的,当我们对被驱动表创建了索引,那么MySQL一定使用的第二种算法,当我们没有创建索引或者对驱动表创建了索引,那么MySQL一定使用第三种算法
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
如何在家中练体力没有健身器材 Sarah Connor中文名是什么?Wait' Til U he是什么歌? 全民奇迹2埋骨沙漠探索任务攻略 埋骨沙漠探索景点在哪-新手攻略-安族... 春风不问路分集剧情 全民奇迹2埋骨沙漠探索任务攻略介绍_全民奇迹2埋骨沙漠探索任务攻略是... 全民奇迹2说谎者任务怎么完成 隐藏说谎者任务攻略 有什么动漫网站吗,可以下载的,别说风车动漫,我觉得不行,我目前在... 无线本与台式电脑连接不同路由,如何共享台式机上的打印机。 十几间办公室如何实现无线宽带网络 ...用一个无线路由器能带多个AP嘛?说说主要用到的设备,和方法!_百度... 男生检查精子多少钱 我的手机是三星9250, 铃声太小了,就算设置到最大都还是很小,找维修师... 三星i9250好吗?那白色好看还是黑色好看 三星I9250怎么样?性能好吗?现在入手怎么样? 三星i9250怎么样?说得越详细,越客观越好 iphone6s不升级ios16会怎样啊? gpio控制是什么意思? GPIO是什么意思? 想问下徐州哪里有厉害的老中医?想看看身体,有时候走路运动下感觉会喘... 徐州有全国出名的老中医吗? 构成利用迷信致人死亡罪既遂怎么处罚 利用迷信致人死亡 下一站我的大学科技巨头结局如何达成_科技巨头结局攻略 抖音抢福袋是什么意思? 抖音福袋什么时候抢几率大 抖音上中福袋的秘诀是什么? 问一下为什么我的U盘明明空间很够,但是却放不进去一个游戏 我不知道自己是怎么了?一会儿想放下一会儿又不想但是怎么也放不下... 女朋友不让把我的GG放进去,为什么啊? ...晨曦荣辉补给活动大全 新女武神武器扩充补给奖励一览-手游活动-安... MySQL中的leave语句及其用法详解MySQL中leave 北京高新技术企业认定北京高新技术企业认定的条件 详细汇编!北京高新技术企业申报条件、时间、材料、注意事项及奖补政策... 腋下老出汗还有一股味怎么回事 北京市高新技术企业认定标准 无骨凤爪需要什么配料 谁能告诉我,我腋窝是怎么回事啊。。为什么会出现白色的东西,很黏... 在北京高新技术企业认定好申请吗? hcg小于2是怎么回事 HCG15怎么回事 ...才0.8吃黄体酮隔6天第二次查血孕酮14.8HCG怎么降到1.2? 快手签名大全霸气超拽 喉咙不痛但是讲话嘶哑怎么办 苹果6 plus怎么打出分机号 二战中日本是怎么侵略美国的 二战中日本打美国的最终目的是什么? 藏语更排是什么意思? 西藏方言地域分布 显卡的性能哪个好? 绝活的意思是什么