0

显然,在数学中,逻辑 AND 和 OR 类似于集合论的 INTERSECT 和 UNION。也就是说,如果 A 和 B 是集合,则 {x: x IN A OR x IN B} = A UNION B(与 AND 和 INTERSECT 类似)。

我的问题如下:这种数学等式是否对应于 SQL 中的运行时等价性?具有一组 OR 表达式的单个 SQL 查询所花费的时间是否等于一组彼此联合的 SQL 查询?更准确地说,是这样的:

SELECT * FROM A
WHERE A.x = a OR A.x = b OR ... OR A.x = z

相当于运行时间?

SELECT * FROM A
WHERE A.x = a
UNION
...
UNION
SELECT * FROM A
WHERE A.x = z

如果实现很重要,我关心的是 MySQL(这是我在工作中使用的)和 PostgreSQL(这是我个人和大学使用的)。

4

1 回答 1

0

我希望 UNION 在理论上会更慢。考虑这样的数据集:

Firstname  Age
---------  ----
John       20
Matt       30
Jess       30
Nate       20 
Tor        10
Matt       20  // different Matt

查询select Firstname from table where age in (10,20,30)可以逐行进行并提取与搜索条件匹配的数据。

查询select Firstname .. UNION .. select Firstname .. UNION ..必须从上到下(假设正在进行表扫描)3 次 - 一次为 10、20 和 30。获取数据后,UNION将删除重复信息。在上面的测试用例中,Matt 出现了两次。它们是不同的 Matts,但UNION会合并重复的 Matts 并仅报告一个(假设select firstname from table ...已完成)。

正如评论员所提到的,数据库可能会实现或尝试以不同的方式重写查询以获得最佳性能。

于 2013-09-04T18:06:34.737 回答