情况: 我有一个包含10,000行的主表 ORDER 和一个包含100,000行的相关详细信息表 ORDERPOSITIONS 。
对于 ORDERPOSITIONS 表,有一个值为UDF“udf_SumPos”的表,其行为如下:
INSERT INTO @table
SELECT t1.order,
sum(t2.price) sumPrice
FROM ORDER t1
JOIN ORDERPOSITIONS t2
ON t1.order = t2.order
GROUP BY t1.order
问题:
如果我使用以下SQL语句:
SELECT t1.order,
t2.sumPrice
FROM ORDER t1
JOIN udf_SumPos() t2
ON t1.order = t2.order
WHERE t1.order = 'MyOrderNumber'
SQL-Server是否会为整个表ORDERPOSITIONS执行udf“udf_SumPos()”,或仅为ORDER =' MyOrderNumber '执行记录?
(由于某些原因我不能使用CROSS APPLY或内联标量UDF)
谢谢!
答案 0 :(得分:1)
它将为整个ORDERPOSITIONS
表执行此操作。
SQL Server甚至不会尝试在整个查询的上下文中优化多语句TVF,并且不会像您希望的那样将谓词推入其中。
您需要使用视图或内联TVF来进行整体优化。
或者改变多语句TVF以接受一个参数,告诉它要过滤的行。