3

当我查询此视图时,我有一个视图,它运行缓慢。但是,如果我删除 NVL 功能,它会运行得很快。

我检查了执行计划,当使用 NVL 函数时,它没有使用任何索引。如果未使用 NVL 功能,则为索引。我试图将索引指定为提示,但没有帮助。不确定执行时是否考虑提示。

下面是视图和用于创建视图的查询。

CREATE OR REPLACE FORCE VIEW  "test"(a,b)
select NVL(table1.a,table2.a) a,table2.b from table1 join table2 on table1.id=table2.id 

我正在查看的查询是

select * from test where a='XYZ'

有什么想法我应该怎么做才能使上述查询快速运行?

4

1 回答 1

1

不确定您是否已经得到答案 - 您需要使用 NVL(a) 使用基于功能的索引。默认情况下,Oracle 不会索引空列,因此当您使用 NVL 查询时,它将执行全表扫描。

于 2012-10-29T12:12:17.930 回答