是否有关于何时或多久执行一次 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] 删除。
我来说两句