IN 语句子查询的执行时间

马延

是否有关于何时或多久执行一次 select 语句与IN结合使用的文档

例如:

NumbersTable

Numbers
1
2
3
4
5

对象

Objects    | NumbersForObjects
Lawnmower  | 4
Hammer     | 2
Cheese     | 12
Plant      | 5

使用以下查询:

SELECT *
FROM ObjectsTable
WHERE ObjectsTable.NumbersForObjects IN (
        SELECT Numbers
        FROM NumbersTable
        )

每次评估新行时都会执行获取 IN 语句值的子查询吗?或者是否有可能将它存储在数组中以节省执行时间?

也许服务器也比我认为的更高效,并且它已经与本机数组实现一样快。如果有某种一般文档如何在后台实现事物,并且有人不介意分享它,这也将是最受欢迎的。

马丁·史密斯

这取决于物理半连接类型(显示在执行计划中)。

如果它是一个散列或合并连接,它只被评估一次。如果它是嵌套循环,它将至少对每个外部行进行部分评估(但只要为该执行找到第一个匹配值,每个评估就可以停止)。

对于最后一种情况,SQL Server 有时可能会在计划中添加一个假脱机来存储子查询结果(并避免每次都必须从基表重新评估),如果它认为这会充分降低成本。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章