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

mysql中in和left join哪个更好

发布网友 发布时间:2022-04-13 02:03

我来回答

3个回答

懂视网 时间:2022-04-13 06:24

今天撸代码时,遇到SQL问题:

(相关mysql视频教程推荐:《mysql教程》)

要将A表查询的ID,匹配B表的ID,并将B表全部内容查询出来:

未优化前:

MySQL [xxuer]> SELECT 
 -> COUNT(*)
 -> FROM
 -> t_cmdb_app_version
 -> WHERE
 -> id IN (SELECT 
 ->  pid
 ->  FROM
 ->  t_cmdb_app_relation UNION SELECT 
 ->  rp_id
 ->  FROM
 ->  t_cmdb_app_relation);
+----------+
| COUNT(*) |
+----------+
| 266 |
+----------+
1 row in set (0.21 sec)

优化后:

MySQL [xxuer]> SELECT 
 -> count(*)
 -> FROM
 -> t_cmdb_app_version a
 ->  INNER JOIN
 -> (SELECT 
 ->  pid
 -> FROM
 ->  t_cmdb_app_relation UNION SELECT 
 ->  rp_id
 -> FROM
 ->  t_cmdb_app_relation) b ON a.id = b.pid;
+----------+
| count(*) |
+----------+
| 266 |
+----------+
1 row in set (0.00 sec)

查看执行计划对比:

MySQL [xxuer]> explain SELECT 
 -> COUNT(*)
 -> FROM
 -> t_cmdb_app_version
 -> WHERE
 -> id IN (SELECT 
 ->  pid
 ->  FROM
 ->  t_cmdb_app_relation UNION SELECT 
 ->  rp_id
 ->  FROM
 ->  t_cmdb_app_relation);
+----+--------------------+---------------------+-------+---------------+---------+---------+------+------+--------------------------+
| id | select_type | table  | type | possible_keys | key | key_len | ref | rows | Extra   |
+----+--------------------+---------------------+-------+---------------+---------+---------+------+------+--------------------------+
| 1 | PRIMARY  | t_cmdb_app_version | index | NULL  | PRIMARY | 4 | NULL | 659 | Using where; Using index |
| 2 | DEPENDENT SUBQUERY | t_cmdb_app_relation | ALL | NULL  | NULL | NULL | NULL | 383 | Using where  |
| 3 | DEPENDENT UNION | t_cmdb_app_relation | ALL | NULL  | NULL | NULL | NULL | 383 | Using where  |
| NULL | UNION RESULT | <union2,3>  | ALL | NULL  | NULL | NULL | NULL | NULL | Using temporary  |
+----+--------------------+---------------------+-------+---------------+---------+---------+------+------+--------------------------+
4 rows in set (0.00 sec)
MySQL [xxuer]> explain SELECT 
 -> count(*)
 -> FROM
 -> t_cmdb_app_version a
 ->  INNER JOIN
 -> (SELECT 
 ->  pid
 -> FROM
 ->  t_cmdb_app_relation UNION SELECT 
 ->  rp_id
 -> FROM
 ->  t_cmdb_app_relation) b ON a.id = b.pid;
+----+--------------+---------------------+--------+---------------+---------+---------+-------+------+--------------------------+
| id | select_type | table  | type | possible_keys | key | key_len | ref | rows | Extra   |
+----+--------------+---------------------+--------+---------------+---------+---------+-------+------+--------------------------+
| 1 | PRIMARY | <derived2>  | ALL | NULL  | NULL | NULL | NULL | 766 | Using where  |
| 1 | PRIMARY | a   | eq_ref | PRIMARY | PRIMARY | 4 | b.pid | 1 | Using where; Using index |
| 2 | DERIVED | t_cmdb_app_relation | ALL | NULL  | NULL | NULL | NULL | 383 | NULL   |
| 3 | UNION | t_cmdb_app_relation | ALL | NULL  | NULL | NULL | NULL | 383 | NULL   |
| NULL | UNION RESULT | <union2,3>  | ALL | NULL  | NULL | NULL | NULL | NULL | Using temporary  |
+----+--------------+---------------------+--------+---------------+---------+---------+-------+------+--------------------------+
5 rows in set (0.00 sec)

热心网友 时间:2022-04-13 03:32

您好,在你的LEFTJOInN 语句相关的表上创建索引。
至于 left join 用多了效率差。这个首先所谓效率差是要有对应比较的,只能说实现相同的功能下两种或多种语句之间的效率优劣。 仅针对一种LEFT JOIN则无从评论,也就不存在所谓的LEFT JOIN效率差的说法。
网上的,大牛的很多说法要看上下文,不能断章取义,另外也不能轻信。

热心网友 时间:2022-04-13 04:50

join 好,in 没法用到索引
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
为什么来大姨妈胸会胀 少儿学什么舞蹈 青年学什么舞蹈好 成年人学什么舞蹈 福州企业最低工资标准 2013年厦门的底薪是多少 生产要素的需求有哪些性质 生产要素的需求有何特点? 什么是生产要素需求 微观经济学要素需求什么是条件要素需求?它和要素需求有什么不同?_百度... 地瓜梗咋晒干 mysql的inner join问题 孕期总是失眠,对宝宝有影响吗 孕后期总是失眠睡不着,孕妇熬夜对胎儿有影响吗? 孕妇睡眠不好会对胎儿有影响吗? 孕妇在孕期睡好觉很重要,睡不好对胎儿有影响吗? 孕早期每天都吐,没胃口,晚上失眠,这对宝宝发育有影响吗? 孕妇白天睡觉晚上失眠,对胎儿的作息时间有哪些影响? 怀孕后怎么睡都不舒服,睡眠不好会不会影响胎儿发育? 怀孕期间白天睡不醒,晚上睡不着,这会对胎儿造成影响吗? mysql left join 怎么优化 哪位大侠知道&quot;唐诗与六朝诗歌的关系(相同点与不同点)&quot; 简述秦、汉、唐、宋、明、清 六朝所设立的中央行政机构。 求六朝云清羽全本~六朝系列有的全都可以给我 谢谢啦~ 六朝最为繁荣的盛世——元嘉之治,到底是什么水平呢? 汉魏六朝是什么意思 六朝系列的主角有没有被ntr啊,哪位大大来个高能预警呗 紫狂的书在哪能下 买了乐视超级电视F55,用了几天还不错,请教一下怎么看奇艺的内容? 乐视超级电视哪款比较好?F55还值得买吗? 我的电脑 DELL INSPIRON 1464 的安全中心打不开了怎么? 秘书的书拼音是几声调 书的声调是第几声调? 书桌的&quot;书&quot;字是几声 书的音节是几声 书籍的籍是几声 一本书的“一”读几声 有人能教下平上去入四声到底是如何区分吗 读万卷书的&quot;卷&quot;是读第三声还是第四声? 古代四声是什么? 读好书,好读书,读好书.第二个好字读几声 能耐普通话书中音调几声 &lt;瞿&gt;.字怎么读书?第几声? 黄瓜应该什么时候吃 有没有手机配件交易或购买的网站 TSI粒子计数器如何检漏送风高效过滤器 mysql not in 查询语句转成left join on格式 为什么我同一身份名下的两个 一个零钱支付限额了另一个却没有? 同一张身份证绑定的两个,有一个显示零钱支付超过10万被*了,另外一个可以支付,为什么? 我的俩个绑定的是一个银行卡,显示都上限了为什么