【发布时间】:2011-08-10 11:29:58
【问题描述】:
我有三个自定义函数,它们做的事情非常相似:它们从同一组相当复杂的连接中提取不同的数据——生成连接表需要时间——并且通常都在同一个 @987654321 中调用@。这显然效率低下,我想提高性能,但最好的方法是什么?
- 创建复杂连接的具体化视图,涵盖所有参数,并在每个函数中引用 this(或完全省略这些函数)。
- 将三个函数组合在一起,并以自定义类型一次返回所有值。
- 还有别的吗?
对于像我这样的菜鸟来说,第一个选项可能是最好的解决方案;但它显然有创建一个相当大的物化视图的缺点,这需要维护(因此它会根据需要刷新);虽然这个 MV 可能在其他地方有用……第二个选项有点小技巧;但还有什么我没有考虑到的吗?
【问题讨论】:
-
n.b.,它必须是物化视图;如果它是一个常规视图,它会(大概)在每次需要时执行,这是同样的问题。
-
你能发一个这些函数的例子吗?
-
@Tony:我不确定公开我的功能是否很酷;但是胆量涉及一个大的
select,这是相当简单的保存with块,这是低效率的根源。鉴于with部分非常透明,它非常适合移动到 MV 中。
标签: oracle function optimization plsql