我有CROSS APPLY与参数化表值函数的问题.
这是简化的伪代码示例:
这是简化的伪代码示例:
SELECT * FROM ( SELECT lor.* FROM LOT_OF_ROWS_TABLE lor WHERE ... ) AS lor CROSS APPLY dbo.HeavyTableValuedFunction(lor.ID) AS htvf INNER JOIN ANOTHER_TABLE AS at ON lor.ID = at.ID WHERE ...
>表上的内部选择LOT_OF_ROWS_TABLE返回许多行.
>连接表LOT_OF_ROWS_TABLE和ANOTHER_TABLE只返回一行或几行.
>表值函数非常耗时且需要大量时间
选择的行持续很长时间.
我的问题:
对于从LOT_OF_ROWS_TABLE返回的所有行,将调用该函数,而不管在加入ANOTHER_TABLE时数据是否受限.
选择必须采用所示的格式 – 它是生成的,实际上它更加困难.
当我尝试重写它时,它可以非常快,但它不能像这样重写:
SELECT * FROM ( SELECT lor.* FROM LOT_OF_ROWS_TABLE lor WHERE ... ) AS lor INNER JOIN ANOTHER_TABLE AS at ON lor.ID = at.ID CROSS APPLY dbo.HeavyTableValuedFunction(at.ID) AS htvf WHERE ...
我想知道:
是否有任何设置或提示或强制选择仅为最终受限制的行调用函数的东西?
谢谢.
编辑:
表值函数非常复杂:http://pastebin.com/w6azRvxR.
我们正在谈论的选择是“用户配置”并生成:http://pastebin.com/bFbanY2n.