【发布时间】:2011-06-03 14:01:48
【问题描述】:
我有一个使用嵌套 CTE 的查询,它位于用户定义的函数中。我必须使用嵌套 CTE,因为我想重用之前选择的一些计算/案例语句。该查询类似于以下内容。
;with cte1 as
(
select a, b from Table1
),
ct2 as
(
case when a =1 then 1 else 0 end as c, b from cte2
)
select * from cte2
我在从多个存储过程调用的 udf 中有这个。在这个查询中进行了大量的计算。当查询在函数之外运行时,我注意到性能差异。对于大约 12,000 条记录,当从 SQL 管理工作室运行查询并应用所有参数时,它的运行时间不到 11 秒。当向 udf 提供相同的参数时,大约需要 55 秒。我试图将查询放在存储过程中而不是 udf 中,但仍然是 55 秒。看起来当从管理控制台运行查询时,它对查询使用并行性,但对函数或存储过程不使用。
目前这不是一个主要问题,但如果可以的话,我想达到同样的 11 秒性能。有没有人遇到过类似的情况?
【问题讨论】:
标签: sql-server sql-server-2005