电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

MySQL中的 inner join 和 left join的區別解析(小結果集驅動大結果集)

瀏覽:233日期:2023-05-08 10:17:46
目錄
  • 場景描述
  • inner join 和 left join 的區別

場景描述

以一個場景為例:

單據A:下游子表 (數據量級?。?br>單據B:下游主表(數據量級?。?br>單據C:中游子表(數據量級小)
單據D:中游主表(數據量級?。?br>單據E:上游子表(數據量級?。?br>單據F:上游主表(比其他表數據量級大)

需求:將單據F的某個字段,刷到單據A的某個字段上面。從A到F,都可以通過id連接索引的形式,來關聯。但是A到F的連接順序必須是從A到F順序連接。比如:

這幾個表的連接可以用下面的例子演示:

a join b on a.id = b.idb join c on b.id = c.mainIdc join d on c.id = d.tableIdd join e on d.id = e.tide join f on e.tid = f.code

inner join 和 left join 的區別

我們寫update語句的時候,肯定是想要用join連表的。但是到底是使用inner join;還是left join比較好呢?

  • left join:

select a.*,b.* from a left join b on a.id = b.id , 這兩個表連接,根據后面的on條件,如果b表里面的b.id不符合 a.id = b.id ,那么a表里面的所有數據列都會給展示出來。然后b表沒有這種數據,所以sql里面的 b.* 會被全部填充成null

  • inner join:

select a.*,b.* from a inner join b on a.id = b.id , 這兩個表連接,根據后面on條件,如果b表里面的b.id不符合 a.id = b.id ,那么a表里面的部分數據列(不符合a.id = b.id條件的)就不會展示。

根據上面的定義,left join常用于select 語句;這是為了防止a表會少一些匹配記錄,為了能展示全a表,所以使用left join。

如下圖所示:

索引角度理解小結果集驅動大結果集

不管是 left join 和 inner join,都要注意小結果集驅動大結果集。a表 join b表的時候,

還是看之前例子的SQL:

select a.*,b.* from a left join b on a.id = b.id

假設a表數量級是100萬條,b表數量級是100條。我這樣連接,就是大表驅動小表;直接看查找次數:

在用后面on條件連接兩個表的時候,首先要走B+樹索引進行匹配;拿a表這100w的數量級,逐條對比 -> B+樹 -> 匹配到 b表的記錄。假設B+樹查找b表的100條要用2次查找,那么最終查找次數就是: 100萬 * 2 次

如果是小表驅動大表:

select a.*,b.* from b left join a on a.id = b.id

那么就會拿b表這100條,逐條對比 -> B+樹 -> 匹配到 a表的記錄。假設B+樹查找a表的100w條要用3次查找,那么最終查找次數就是: 100 * 3 次

從索引匹配的角度講,小結果集驅動大結果集的效率優化了不是一點半點。我們要有意識地讓小表在左邊,大表在右邊

但是如果你用的是inner join,MySQL內部會做優化,自動讓小表在前大表在后。也就是說你怎么寫,效率都是一樣的。但是left join卻不能自動優化,這點需要注意!

update語句常用 inner join而不是left join

舉例如下SQL:

(任務目標:用f 表字段更新a表字段)

update a inner join b on a.id = b.idinner join c on b.id = c.mainIdinner join d on c.id = d.tableIdinner join e on d.id = e.tidinner join f on e.tid = f.codeset a.Demand_orgid = f.req_org_idwhere xxx = xxx;

update 原則上 都得用inner join。

看上面的SQL,假設你全部都用的left join做關聯,由于你最終update 的是 a的字段;假設a表在left join的過程中,因為某個點匹配不到f表,那么用f 表字段更新a表字段 這一個過程中,一旦有任意一個環節匹配不到,那么f 表的字段全都會用null填充。最終,a表匹配不到f表的數據,都會被更新成null !

但是如果你用inner join,用f 表字段更新a表字段 這一個過程中,一旦有任意一個環節匹配不到,那么a表匹配不到 f 表的所有數據就不會顯示,也就是說不會更新。

你想想,你都匹配不到數據列。你還更新啥,難道更新null嗎。基于上面的原因,inner join 其實就滿足需求了

況且!left join 要考慮這幾張表的大小關系,誰大誰小,小結果集驅動大結果集。但是inner join 就完全不用考慮此問題,因為inner join MySQL內部會做優化,自動讓小表在前大表在后。

到此這篇關于MySQL中的 inner join 和 left join的區別的文章就介紹到這了,更多相關mysql inner join 和 left join區別內容請搜索以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持!

標簽: MySQL
主站蜘蛛池模板: Eiafans.com_环评爱好者 环评网|环评论坛|环评报告公示网|竣工环保验收公示网|环保验收报告公示网|环保自主验收公示|环评公示网|环保公示网|注册环评工程师|环境影响评价|环评师|规划环评|环评报告|环评考试网|环评论坛 - Powered by Discuz! | 脉冲布袋除尘器_除尘布袋-泊头市净化除尘设备生产厂家 | 干法制粒机_智能干法制粒机_张家港市开创机械制造有限公司 | 热镀锌槽钢|角钢|工字钢|圆钢|H型钢|扁钢|花纹板-天津千百顺钢铁贸易有限公司 | 回收二手冲床_金丰旧冲床回收_协易冲床回收 - 大鑫机械设备 | 背压阀|减压器|不锈钢减压器|减压阀|卫生级背压阀|单向阀|背压阀厂家-上海沃原自控阀门有限公司 本安接线盒-本安电路用接线盒-本安分线盒-矿用电话接线盒-JHH生产厂家-宁波龙亿电子科技有限公司 | SMC-SMC电磁阀-日本SMC气缸-SMC气动元件展示网 | 自动化生产线-自动化装配线-直流电机自动化生产线-东莞市慧百自动化有限公司 | 济南冷库安装-山东冷库设计|建造|冷库维修-山东齐雪制冷设备有限公司 | 河南生物显微镜,全自动冰冻切片机-河南荣程联合科技有限公司 | 抖音短视频运营_企业网站建设_网络推广_全网自媒体营销-东莞市凌天信息科技有限公司 | 西安烟道厂家_排气道厂家_包立管厂家「陕西西安」推荐西安天宇烟道 | 全自动翻转振荡器-浸出式水平振荡器厂家-土壤干燥箱价格-常州普天仪器 | 集菌仪_智能集菌仪_全封闭集菌仪_无菌检查集菌仪厂家-那艾 | 刚性-柔性防水套管-橡胶伸缩接头-波纹管补偿器-启腾供水材料有限公司 | 软文发布平台 - 云软媒网络软文直编发布营销推广平台 | 全自动包装机_灌装机生产厂家-迈驰包装设备有限公司 | 钢托盘,钢制托盘,立库钢托盘,金属托盘制造商_南京飞天金属制品实业有限公司 | LOGO设计_品牌设计_VI设计 - 特创易 | jrs高清nba(无插件)直播-jrs直播低调看直播-jrs直播nba-jrs直播 上海地磅秤|电子地上衡|防爆地磅_上海地磅秤厂家–越衡称重 | 步进电机_agv电机_伺服马达-伺服轮毂电机-和利时电机 | IWIS链条代理-ALPS耦合透镜-硅烷预处理剂-上海顶楚电子有限公司 lcd条形屏-液晶长条屏-户外广告屏-条形智能显示屏-深圳市条形智能电子有限公司 | 中式装修设计_全屋定制家具_实木仿古门窗花格厂家-喜迎门 | 软装设计-提供软装装饰和软装配饰及软装陈设的软装设计公司 | 新型锤式破碎机_新型圆锥式_新型颚式破碎机_反击式打沙机_锤式制砂机_青州建源机械 | 无压烧结银_有压烧结银_导电银胶_导电油墨_导电胶-善仁(浙江)新材料 | 5L旋转蒸发器-20L-50L旋转蒸发器-上海越众仪器设备有限公司 | 焦作网 WWW.JZRB.COM | 信阳网站建设专家-信阳时代网联-【信阳网站建设百度推广优质服务提供商】信阳网站建设|信阳网络公司|信阳网络营销推广 | 气象监测系统_气象传感器_微型气象仪_气象环境监测仪-山东风途物联网 | 深圳市索富通实业有限公司-可燃气体报警器 | 可燃气体探测器 | 气体检测仪 | 基业箱_环网柜_配电柜厂家_开关柜厂家_开关断路器-东莞基业电气设备有限公司 | 炉门刀边腹板,焦化设备配件,焦化焦炉设备_沧州瑞创机械制造有限公司 | 丙烷/液氧/液氮气化器,丙烷/液氧/液氮汽化器-无锡舍勒能源科技有限公司 | 开锐教育-学历提升-职称评定-职业资格培训-积分入户 | 南京和瑞包装有限公司| 艾默生变频器,艾默生ct,变频器,ct驱动器,广州艾默生变频器,供水专用变频器,风机变频器,电梯变频器,艾默生变频器代理-广州市盟雄贸易有限公司官方网站-艾默生变频器应用解决方案服务商 | 流量检测仪-气密性检测装置-密封性试验仪-东莞市奥图自动化科技有限公司 | MTK核心板|MTK开发板|MTK模块|4G核心板|4G模块|5G核心板|5G模块|安卓核心板|安卓模块|高通核心板-深圳市新移科技有限公司 | 维泰克Veertek-锂电池微短路检测_锂电池腐蚀检测_锂电池漏液检测 | 济南办公室装修-厂房装修-商铺装修-工装公司-山东鲁工装饰设计 |