1

我正在考虑整体性能,并提出如何以最快的方式从表中获取行的问题:

SELECT *
FROM table a
WHERE a.id IN (SELECT id FROM table b)

或者

SELECT *
FROM table a
WHERE (SELECT COUNT(id) FROM table b WHERE b.id = a.id)>0

在我的开发机器上运行分析器并没有太大的不同,但我没有大量的数据表来比较这个问题。

因此,如果有人能说出哪种方式更好以及为什么更好,那就太酷了。我读过一次,将IN值拆分为许多OR类似的值,但我不确定这是否一般,如果我查询子选择,是否相同。在这种情况下,我猜 COUNT 会更快......IN (1,2,3,4)1 OR 2 OR 3 OR 4

4

2 回答 2

3

当您需要确定某事是否存在时,获取 COUNT 不是一个好主意。当您需要确定数量时,应使用 COUNT。COUNT 必须读取所有行(在表中或索引中)以确定它们是否符合条件,而 EXISTS 可以在找到第一次出现后立即停止处理。答案#1支持这一点。

于 2013-05-24T12:12:23.527 回答
2

请查看真实数据库的结果(包含 100.000 条记录的表)。

1. EXISTS - 803ms
2. COUNT - 814ms
3. IN - 870ms

探查器

于 2013-05-24T11:41:40.793 回答