这是我在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使用了一些并行计算(我不熟悉执行计划)。
问题
PS:我已经在查询的列上创建了一个索引。
感谢。