我们才刚刚开始考虑从SQL 2000迁移到SQL 2008,并指出新的CROSS APPLY和INNER APPLY语法,允许“加入”反对任何表值参数化的UDF或相关子查询的一种形式。

显然,这将是很好能够封装逻辑的UDF,并能够重复使用在不同的查询,但我敢肯定,功能是有代价。

我环顾四周,在网络上颇有几分,但我找不到任何性能指标,指示多少表现打你会使用采用基于查询的时候接管你可能会得到,如果你内联同查询。

我知道确切影响将在很大程度上取决于特定的模式和查询,但我很好奇,如果任何人有从调整实际系统的经验,分享这一点。

有帮助吗?

解决方案

我使用的地方适用。这是非常有用的行处理逼行,而不是循环的,如果你有这样做。

奇怪的是,在一个地方它WS更有效(使用探查到视图时读取),因为优化器处理的UDF视为黑盒和所应用的过滤器,因为我想。

在UDF是内嵌表值函数,当膨胀/在JOIN更糟嵌套的,因为optmiser看着所述查询作为一个整体,所施加的滤波器INA不同的地方。

否则,我要节制利用或不经常运行的代码...并确认它不会杀死非常糟糕。我接受命中获得可维护性。

题外话:封装只是到目前为止在数据库:在某些时候你失去了一套基于优势

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top