我有一个表值函数,里面有很多代码,做多个连接选择和调用子函数并返回一个结果集。在这个函数的开发过程中,在某些时候,我在执行函数时遇到性能下降。通常不应超过1秒,但开始大约需要10秒。我玩了一些连接和索引,但没有任何改变。 经过一段时间的变化和研究后,我希望以另一种方式看待结果。我创建了与存储过程完全相同的精确代码。然后我执行了sp。繁荣!它需要不到1秒。使用函数,相同的精确代码大约需要10秒。
我真的无法弄清楚这一切是什么,我没有时间做更多的研究。由于某些原因我需要它作为一个功能,但我不知道该做什么。我以为我可以创建它作为proc然后在函数内调用它然后我意识到它不可能为函数做。
我想听听专家提出的一些好的意见和建议。 提前谢谢
ps:我没有在这里添加任何代码,因为代码格式不好而且很脏。如果有人有兴趣我会分享。服务器是sql 2014企业64位 编辑:我之前看到了可能重复的问题,但它并不满足我,因为我的问题是关于性能命中。关于程序和功能之间的一般差异,另一个问题有许多答案。我想更清楚地了解可能与性能相关的差异。
答案 0 :(得分:1)
这些与我的经历有所不同:
SET STATISTICS TIME ON
查看查询编译时间与执行时间。JOIN
决定。有些人更喜欢表值函数,因为它们更容易查询:
SELECT * FROM fcn_myfunc(...) WHERE <some_conditions>
执行存储过程,然后过滤掉临时表,而不是创建临时表。如果您的代码对性能至关重要,请将其转换为存储过程。