inner join VS union all,当没有找到结果时

inner join VS union all, when the result is not found

我有两个具有相同列名的 table。我想在 them.I 的研究中搜索并意识到使用 UNION ALLINNER JOIN 更好(在速度和性能方面)。现在我想知道如果没有找到结果, UNION ALL 更好吗?

我认为JOIN关键字的算法是:如果在第一个table中没有找到结果,则停止操作(在第二个table中,不会搜索)。但是 UNION ALL 搜索任何 case.my 中的所有 table 认为是对的吗?如果我的想法是对的,那么 INNER JOIN 在找不到结果时会更好?

要点:col 已编入索引 (phpmyadmin)。

如果找不到结果,现在哪个性能更好?

SELECT col FROM table1 WHERE col='test'
UNION ALL
SELECT col FROM table2 WHERE col='test';

VS

SELECT col
FROM table1
INNER JOIN table2
ON table1.col=table2.col
WHERE col='test';

UNION ALL 通常更快。它不需要任何复杂的查找。它只是连接两个查询结果。在 INNER JOIN 的情况下,是否从两个 table 查询数据在很大程度上取决于数据库,更不用说具体细节(使用的索引等)。

也就是说,您的查询根本不一样。如果两个 table 都包含这样一条记录,带有 UNION ALL 的版本将 return 两行,如果 table 包含匹配项,则仍然 return 一行。

带有INNER JOIN的版本将只有 return一行,如果两个table都包含匹配的记录,并且不会return 一行,如果其中只有一个(或 none)包含匹配记录。

注意,带有 INNER JOIN 的那个使用非别名列 col,这可能会导致错误。

总的来说,不要根据理论开始优化。编写尽可能适用于该情况(语义正确)的清晰易读的查询。仅在需要时进行优化。

另外,注意不要优化错了。即使 INNER JOIN 版本在找不到数据时会稍微快一些,但 UNION ALL 版本仍然会快如闪电,所以最好在有匹配的情况下选择更优的版本.