我有以下查询,为简单起见,我使用下面的简单示例格式:
SELECT
col1, col2, dbo.fun3(col3)
GROUP BY col1, col2, dbo.fun3(col3)
这需要 30 秒运行并返回 6000 条记录。当我在SELECT和GROUP BY中删除dbo.func3(col3)时,它只需要 5 秒就可以返回 6000 条记录。
所以我想我的性能影响归结为以下几点:
- dbo.func3() 很慢,需要进一步的工作来提高它的性能
- GROUP BY中的函数调用会导致缓慢。
我想隔离 dbo.func3() 有多慢所以我在没有GROUP BY的情况下运行了以下查询:
SELECT col1, col2, col3
相对
SELECT col1, col2, dbo.fun3(col3)
第一个在 15 秒内返回大约 900,000 条记录。第二个在 15 秒内返回 500,000 条记录。
这证明我应该改进我的 func3() 函数。但是,您知道我可以通过部分查询在组中做些什么来减少延迟吗?
这个函数是否被调用了两次,因为我在查询的 select 和 group by 部分中有它?
由于您的问题是关于性能的,我建议您开始使用您已经拥有的性能工具来研究这个问题。这样你的猜测会更精确或更好:你根本不需要猜测。
显示实际执行计划
设置统计时间 (Transact-SQL)
设置统计信息 IO (Transact-SQL)
如果在使用这些工具后您无法找到答案,请更新您的问题,添加结果和功能代码,我们会尽力为您提供进一步的帮助。
如果没有您的实际代码,就不可能有很大帮助。
可以在执行计划上进行验证。