问题是:可以使用内联表值函数(ITVF)来封装和重用代码吗?或者这会导致性能问题?使用内联表值函数封装SQL代码的性能
我研究联表值函数,这使我这个讨论: When would you use a table-valued function?
讨论的回答指出值函数“内嵌表允许优化治疗这些功能没有区别对象他们封装给你最佳的性能(假设你的索引和统计数据是理想的)。“
我最初的问题是,我试图将不同的数据源重新格式化为标准格式,然后将它们合并。我测试了联合6个不同的ITVF,而不是在一个查询中执行联合和转换。执行计划是相同的。由于我的背景是在oop中,我宁愿将查询拆分成更小的函数,但在我承诺在将来的项目中这样做时,我想知道是否使用过多的ITVF最终会导致性能问题。
只是不要陷入这样一种常见的误解,即添加“RETURNS TABLE”使您的函数内联。它必须只是一个单一的陈述。如果你有变量或者多行代码,那么性能将会非常糟糕......甚至比标量函数还要糟糕。 –
@SeanLange什么算作一个单一的陈述?是工会,交叉适用和子查询是否考虑过一个或多个陈述? –
这将是一个单一的陈述。如果你必须把开始/结束块,你没有内联函数。如果你的函数定义是“... AS RETURN ...”,你的状态良好。 :) –