【发布时间】:2018-04-24 17:07:42
【问题描述】:
我有 2 个这样的视图(简化):
CREATE VIEW BASE_VIEW AS
(
-- Simplified version, view actually does a lot more.
SELECT * FROM MYTABLE;
);
CREATE VIEW OUTER_VIEW AS
(
-- The where clause here makes this view return half the rows as the above BASE_VIEW
SELECT * FROM BASE_VIEW where SomeField = 'something'
);
我的问题是,OUTER_VIEW 的执行时间不应该是 BASE_VIEW 的大约一半吗?我看不到这种行为。执行 BASE_VIEW 几乎需要全部时间。
由于 Oracle 将引用的视图编译到您的外部视图中,我认为它足够智能,可以根据外部视图的 where 类优化查询。不应该吗?
编辑:事实上,带有来自“外部视图”的 where 子句的“基本视图”查询花费了一半的时间。
【问题讨论】:
-
您正在处理多少行?您有权访问查询计划吗?它是索引表吗?该列是否被索引?
-
注意窗口函数将导致第一个视图在应用过滤器之前运行,但您似乎没有使用任何提示