类似Oracle函数集的优化选项

时间:2011-08-10 11:29:59

标签: oracle function optimization plsql

我有三个自定义函数执行非常类似的操作:它们从相同的,相当复杂的连接集中提取不同的数据 - 生成连接表需要花费时间 - 并且通常都在同一个{{ 1}}。这显然是低效的,我想提高性能,但最好的方法是什么呢?

  • 创建复杂连接的物化视图,涵盖所有参数,并在每个函数中引用它(或者只是省略这些函数)。
  • 将三个功能一起滚动并以自定义类型一次性返回所有值。
  • 别的什么?

对于像我这样的新秀来说,第一个选择似乎是最好的解决方案;但它显然有一个缺点,就是创建一个非常大的物化视图,这需要维护(所以它根据需要刷新);虽然这个MV可能在其他地方很有用......第二种选择可能是一种黑客攻击;但还有什么我还没有考虑过吗?

2 个答案:

答案 0 :(得分:1)

我更希望完全省略这些函数并重新编写查询,以便不使用函数。任何选择数据的函数(特别是使用“复合连接”)都是减慢查询速度的可靠方法,因为对于主查询处理的每一行(甚至不一定返回),该函数必须执行一次,可能是1000s(或者100,000s)次。

答案 1 :(得分:0)

我会谨慎地选择选项2,除非你真的想要一个物化视图。您可以将该函数转换为表格,以便您可以正常选择。