【发布时间】:2017-07-28 20:21:03
【问题描述】:
如何在运行 Oracle Views 时提高性能? 我有一个 Oracle 视图,它看起来像这样:
SELECT ...
FROM myview p
WHERE p.param1 = 'x' AND p.param2 = 'y' AND p.param3 = 'z'
视图的代码是(类似地):
SELECT a.param1, b.param2, c.param3
FROM atab a
JOIN btab b
ON a.id = b.blaid
JOIN ctab c
ON b.id = c.blaid
myview 有条件的运行时间约为 13-14 秒。 当我让运行带有条件的查询时:
SELECT a.param1, b.param2, c.param3
FROM atab a
JOIN btab b
ON a.id = b.blaid
JOIN ctab c
ON b.id = c.blaid
WHERE a.param1 = 'x' AND b.param2 = 'y' AND b.param3 = 'z'
运行时间约为 0.3 秒。
我理解这一点,因此 Oracle 首先获取 myview 的所有数据,然后应用过滤器。但我不太确定。 如果我直接运行查询,Oracle 可以选择只获取实际需要的数据(因为在执行时,可以立即考虑条件)。但是这里我也不是很确定。
问题是,当视图结构复杂且存在合理性时,如何解决性能问题?
我考虑了一个解决方案,例如使用带参数的函数。可以使用 where 条件立即执行查询。
还有其他可能的解决方案吗?
【问题讨论】:
标签: sql oracle performance views