sql-server – 具有表值函数限制性能的CROSS APPLY
发布时间:2020-05-24 14:41:08 所属栏目:MsSql 来源:互联网
导读:我有CROSS APPLY与参数化表值函数的问题. 这是简化的伪代码示例: SELECT * FROM ( SELECT lor.* FROM LOT_OF_ROWS_TABLE lor WHERE ...) AS lorCROSS APPLY dbo.HeavyTableValuedFunction(lor.ID) AS htvfINNER JOIN ANOTHE
|
我有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时数据是否受限. 选择必须采用所示的格式 – 它是生成的,实际上它更加困难. 当我尝试重写它时,它可以非常快,但它不能像这样重写: 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. 解决方法您可以使用表变量或临时表将此查询分为两部分SELECT lor.*,at.* into #tempresult
FROM (
SELECT lor.*
FROM LOT_OF_ROWS_TABLE lor
WHERE ...
) lor
INNER JOIN ANOTHER_TABLE AS at ON lor.ID = at.ID
WHERE ...
现在做表值函数的耗时部分吧 SELECT * FROM #tempresult CROSS APPLY dbo.HeavyTableValuedFunction(#tempresult.ID) AS htvf (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- sql – 尝试从链接服务器中选择的灾难性故障
- 实体框架 – 实体框架多对多聚类与非聚集索引
- MySQL数据库备份方法说明
- ASP使用MYSQL数据库全攻略
- sql-server – 如何将多个列“内嵌”(去标准化/连接)到一个
- sql-server – 由于WHERE子句中有超过100,000个条目,因此SQ
- sql-server-2008 – 使用ROW_NUMBER()OVER(PARTITION BY …
- sql-server – SQL Server 2008:找出表中的主键/外键?
- sql-server-2005 – Hibernate如何映射SQL数据类型nvarchar
- sql-server – SQL Server:无法为链接服务器“(null)”初始
