【发布时间】:2012-03-01 11:16:20
【问题描述】:
我正在尝试优化数据库中的查询。该查询类似于以下内容:
select * from Account
inner join udf_Account('user') udfAccount
on Account.Id = udfAccount.AccountId
实际上真正的查询要长得多,但最重要的一点是它包含一些用户定义函数 (udf) 的内部连接,这些函数取决于用户 ID。 (所以这是一个常量参数,在查询评估期间不会改变)。
由于数据量大,我的查询在生产数据库上大约需要 20 秒,这是不可接受的。
我已经看到,通过将函数的结果存储在临时表中并在查询中使用这些表,可以大大减少查询的持续时间。
我在问以下问题:
我可以避免使用临时表吗?这不是告诉sql函数只能评估一次的方法吗?使用临时表意味着我的代码会发生一些重要的变化,这就是为什么如果我有另一个解决方案我会很高兴的原因。
还有其他方法可以优化我的查询吗?
【问题讨论】:
-
我忘了补充一点,我的函数都是“内联表值”函数。
标签: sql optimization join user-defined-functions