首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

图解MySQL中的JOIN类型

图解MySQL中的JOIN类型 目录 两张表 内部连接 左外连接 右外连接 半连接 反半连接 带排除的左外连接 带排除的右外连接 全外连接 带排除的全外连接 两个内部连接 两个左外连接...内连接和左外连接 两张表 INNER JOIN (内部连接) LEFT OUTER JOIN (左外连接) RIGHT OUTER JOIN (右外连接) SEMI JOIN Similar...ANTI SEMI JOIN (反半连接) LEFT OUTER JOIN with exclusion (带排除的左外连接) RIGHT OUTER JOIN with exclusion (带排除的右外连接...) FULL OUTER JOIN (全外连接) FULL OUTER JOIN with exclusion (带排除的全外连接) Two INNER JOINs (两个内部连接) Two...LEFT OUTER JOINS (两个左外连接) INNER JOIN and a LEFT OUTER JOIN (内连接和左外连接)

1.6K40

mysql join

首先先放张图 今天聊聊mysqljoin连接,其本质是拿主表每条数据取出来和子表每行数据进行循环比较,如果满足则返回,不满足返回null 首先是内连接 两者之间取交集,两边都满足返回,不满足不返回...JOIN 然后是左外连接 左外连接,此时可以理解为理解 左表为主表,右表为子表。...sp_user b ON a.seller_id = b.seller_id WHERE b.seller_id IS NULL 还有一种是全外连接 全外连接是内联结果和不满足条件的行 mysql...UNION SELECT * FROM sp_user a RIGHT OUTER JOIN tb_seller b ON FALSE 另外,阿里开发规范表示 【强制】超过三个表禁止 join...需要 join 的字段,数据类型必须绝对一致;多表关联查询 时,保证被关联的字段需要有索引。

59010
您找到你想要的搜索结果了吗?
是的
没有找到

Mysql - join 优化

MMR 解决的不是 join 优化,而是回表优化:   mutil-range read , 正如他的名字一样,优化的是离散范围的读,具体是优化在 主键上离散范围的读   如果是从辅助索引读取符合条件的...离散读取主键索引的情况   MMR 做的事情是 把得到的 主键先放在 read_rnd_buffer ,然后排序,然后再去主键索引读取 数据行,这样的话就能减少离散读 BKA 依赖于 MMR 进行 join...在被驱动表有主键的情况下,驱动表读一行就要去 被驱动表通过主键在B+树查找一次,如果可以一次性给许多 主键,并且是有序的话,就能大大提高效率   BKA 用上了 NLJ( index nested loop join...)情况下用不上的 join buffer,每读一行驱动表,就将连接字段放入 join buffer   然后将 join buffer 传给 MMR ,MMR 负责 去连接字段对应的被驱动表的辅助索引上读取主键...,并且放到 read_rnd_buffer ,然后排序,再去被驱动表的主键索引读取行数据 大表 join 对内存的影响:   如果被驱动表是 大表,驱动表也比较大,能被分成几个 join buffer,

64920

Mysql - join 原理

A left join B , B right join A on A.x = B.y   假设 A 100 行, B 1000 行 A 是驱动表,B是被驱动表 1.被驱动表上有索引的情况:(B.y...N 行结合 放到结果集(结果集是最后返回给用户的,不算临时表)   具体只用 100 * k * log (1000) 次的磁盘读,k是不定常数 2.被驱动表上无索引的情况   需要额外内存,被称为 join...buffer   join buffer 被放入驱动表,一般选用小的当驱动表(小的度量单位指的是 表行数 * 每行大小)   对于被驱动表,从硬盘读出,并且每读出一行数据(先放在内存),就会取这行数据...去和内存中的小表一行行比较   把符合条件的驱动表的行 和 从磁盘中读出来的被驱动表的行 放入结果集   具体要比较 100 * 1000 次,但是是内存操作   磁盘读需要 100 + 1000 次 3.如果驱动表太大,join...被驱动表比较,并且被比较的部分是被 整个被驱动表 比较 所以,如果驱动表被分成 K 份,就需要读取 被驱动表 K 次 总共需要磁盘 读取次数 = 驱动表行数 + 被驱动表行数 * (驱动表总大小 / join

74930

mysqljoin

前言: 了不起学弟:学长啊,我最近在学习mysql,对于这个join,我也有了自己的一些看法,这个join就差不多就是把两张表连接在一起对吧!...select * from A inner join B on A.productId=B.productId(建议大家保持一个良好的编写sql习惯,不要一长条全写在一行上,这对阅读代码的来说,非常的头疼...说完inner join,我们再讲一下 left join吧。left join 和inner join 其实是很相似的。inner join 就是取两张表的交集。...而left join,就是包含了相交的地方,和左表的地方,按照刚刚的例子也就是说,包含了所有的圈A。 举个刚才的例子,假设刚刚的订单表和产品表。...如果我们left join,那我们得到的结果就是订单表的所有的记录,如果你是select * ,那条不在产品表记录的数据,后边B标的数据就是为空。

12610

MySQL Join工作原理

select * from t1 straight_join t2 on t1.a=t2.a; 这里使用straight_join,如果我们直接使用joinMySQL优化器可能选t1或t2作为驱动表...Block Nested-Loop Join Index Nested-Loop Join是在被驱动表有索引的情况下,如果被驱动表上没有可用的索引,算法的流程如下: 将表t1的数据读入线程内存join_buffer...* from t1 straight_join t2 on t1.a=t2.b; 在整个过程对表t1和t2做了一次全表扫描,因此扫描行数为1100行,由于join_buffer是无序的数组,因此对于表...join_buffer的大小是由join_buffer_size决定,默认值是256K。...join_buffer中,如果join_buffer满了,进行第2步 扫描t2,把t2中的每一行取出来,跟join_buffer中的数据做对比,满足join条件的作为结果集的一部分返回 清空join_buffer

42120

【C 语言】数组 ( 数组类型表达 | 定义数组类型 )

文章目录 总结 一、数组类型表达 二、定义数组类型 三、代码示例 总结 // 定义类数组数据类型 int [10] , 类型别名为 ArrayType typedef int (ArrayType...)[10]; // 与 int array[10] = {0}; 作用相同 ArrayType array2 = {0}; 一、数组类型表达 ---- C 语言中的 数据类型 分为 基础数据类型..., 非基础数据类型 ; 数组类型 由 元素类型 和 元素个数 共同决定 , int array[10] 的数据类型是 int [10] , 其中 int 是元素类型 , [10] 是元素个数 ; 二、...定义数组类型 ---- 定义数组类型 : 小括号 () 优先级高于 中括号 [] , 二者的结合方向都是自左向右 ; 参考 C 运算符 结合性 ; typedef int (ArrayType)[10]...(ArrayType)[10]; 使用定义的数组类型别名声明数组 : // 与 int array[10] = {0}; 作用相同 ArrayType array2 = {0}; 三、代码示例

1.7K10

关于mysqljoin

create index userId  on article_list (userId); create index categoryId  on article_list (categoryId); mysql...查询,跟分开查询(这里的分开查询做了优化,因为只有100条消息,所以只需要一次性查出100条即可) join查询在1.4-4秒之间,而分开查询也在1.5-3.4秒之间,也没有更快 原理解析: 在mysql...都需要进行一次sql命令解析->sql查询->数据传回,查询次数越少则越快 4:数据组装,当使用join,order by,group by等sql语句时,会使得mysql查询完数据之后还需要对数据进行拼装再返回...方式查询更快 如果使用php进行数据组装,速度则跟join方案几乎一致 注:本身mysql原生查询,应该是游标式while循环获取,本文使用的foreach其实在原生查询中,可以省略好几个步骤,应该是分开查询更快...1:join如果逻辑太多,代码将非常难懂 2:join如果太多,对于这条sql 的索引优化将会变得更难 3:join的sql复杂,可读性差,同时由于sql复杂,很难被mysql缓存 4:分开查询的sql

1K20

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券