sql select(..)其中id in(list_of_values)vs select(...)where where in(subquery)

时间:2014-03-06 22:06:50

标签: sql-server performance

这是我在Stackoverflow上的第一篇文章。 : - )

我使用的SQL服务器有一个巨大的表(最多50'000'000条记录)和一个较小的表(最多500'000条记录)。

让我们考虑两个问题:

查询A

SELECT *
FROM my_huge_table
WHERE column_name IN(list_of_values)

查询B

SELECT * 
FROM my_huge_table 
WHERE column_name IN (
    SELECT column_name
    FROM smaller_table
    WHERE ...
)

查询B中的子查询返回与查询A中的list_of_values完全相同的列表。

查询A中list_of_values的长度是有限的(如Web上的许多地方所述)。如果我的list_of_values很长(例如:10'000),我必须将其拆分为块,但是当我使用查询B时,它工作正常,尽管来自查询B 的子查询的结果包含10 '000记录......

当我使用查询B时,它比查询A更快。我查看了执行计划,它显示查询B使用了一些并行计算(我不熟悉执行计划)。

问题

  1. 在我的脚本中,我有一个值列表,我无法轻松创建子查询。有没有办法使用值列表执行类似于查询B的操作?
  2. 为什么查询B比查询A更快?
  3. 还有其他优化要做吗?
  4. PS:我已经在查询的列上创建了一个索引。

    感谢。

0 个答案:

没有答案