gpt4 book ai didi

mysql - 为什么 "join on or"比两个 "join on"慢得多?

转载 作者:行者123 更新时间:2023-12-01 00:04:56 25 4
gpt4 key购买 nike

下面的查询很快:

SELECT *
FROM apple
LEFT JOIN banana b1
ON apple.id = b1.one
LEFT JOIN banana b2
ON apple.id = b2.two
WHERE b1.id IS NULL
AND b2.is IS NULL

虽然以下很慢:

SELECT *
FROM apple
LEFT JOIN banana
ON apple.id = banana.one
OR apple.id = banana.two
WHERE banana.id IS NULL

谁能解释为什么使用“或”执行“连接”语句比连接两个表慢得多?

最佳答案

在连接处的第一个查询中,mysql 将仅使用 banana 表中的一列进行查找(N 次查找,其中 N 是来自 apple 的记录的 nb table )。

在第二个查询中,它必须使用 banana 表中的 2 列进行查找,在最坏的情况下,它必须进行 NxN 次查找,其中 N 是来自 apple

的记录

您可以阅读有关所用算法的更多信息 here .

您还可以检查此 fiddle 中的 EXPLAIN 输出由 Stan McGeek 提供

更新:还请记住:

If you use LEFT JOIN to find rows that do not exist in some table and you have the following test: col_name IS NULL in the WHERE part, where col_name is a column that is declared as NOT NULL, MySQL stops searching for more rows (for a particular key combination) after it has found one row that matches the LEFT JOIN condition.

关于mysql - 为什么 "join on or"比两个 "join on"慢得多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17359353/

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