gpt4 book ai didi

MySQL 内部连接 ​​VS 左连接 w/IS NOT NULL?

转载 作者:可可西里 更新时间:2023-11-01 06:46:42 25 4
gpt4 key购买 nike

以下是否存在性能差异?

SELECT person.id
FROM person
LEFT JOIN address ON person.id = address.personID
WHERE address.personID IS NOT NULL

对比

SELECT person.id
FROM person
INNER JOIN address ON person.id = address.personID

此查询应显示所有具有地址记录的人员 ID(并非全部)。此处合乎逻辑的做法是使用内部联接,如第二个示例所示。由于并非完全重要的原因(查询是从查询构建器生成的),我可能不得不使用第一种方法。

很好奇影响是什么。 MySQL 在 LEFT JOIN 时是否做了很多额外的工作,然后将该字段与 null 进行比较以减少集合?也许这就是 INNER JOIN 在幕后的工作方式?

最佳答案

如下所示,这两个查询可能有不同的执行计划:

SELECT p.*, s.*
FROM p
LEFT
JOIN s ON s.col = p.col
WHERE s.col IS NOT NULL

SELECT p.*, s.*
FROM p
INNER
JOIN s ON s.col = p.col

id select_type table type poss key key_len ref rows Extra
-- ----------- ------ ---- ---- ---- ------- ----- ---- --------
1 SIMPLE p ALL - - - - 3
1 SIMPLE s ref s_ix s_ix 9 p.col 1

id select_type table type poss key key_len ref rows Extra
-- ----------- ------ ---- ---- ---- ------- ----- ---- -----------------------------
1 SIMPLE s ALL s_ix - - - 2
1 SIMPLE p ALL p_ix - - - 3 Using where; Using join buffer

因此,我们必须得出结论,性能可能存在差异。在小集合上,差异可以忽略不计。大集合可能会显示出显着的性能差异;我们希望 INNER JOIN 更有效率。完全有可能有一个测试用例可以证明 LEFT JOIN 的性能更好,但我还没有找到。

关于MySQL 内部连接 ​​VS 左连接 w/IS NOT NULL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22568787/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com