这可能很难理解(因为出于安全原因我必须含糊不清),但我会尝试解释我的困境。
我有两张桌子SD和SS。
SD与OL_ID列上的SS具有1对多的关系。
我正在创建一个带有SD和SS的视图,只有当SD记录没有关联的子SS记录时才返回SD.SD_ID值,否则它返回SS.SS_ID(创建一个物质视图不是一个选项)。 / p>
当我创建视图时,假设开头的NVL语句导致全表扫描,因此使视图执行速度非常慢。我已经修改了NVL语句,以便从记录中返回硬编码的数字而不是SD.SD_ID,并且查询时间大大减少。
这些表已被编入索引。我没有使用基于函数的索引,我不确定它在这种情况下是否有用。
基本上,我想知道我是否可以用NVL重写此查询:
我会尽力回答任何问题,但我能提供的信息可能有限。任何重写的想法将不胜感激。效率不一定是目标,更多的改写绕过" NVL"声明在开头。
CODE
CREATE VIEW SD_VIEW(S_ID, S_OL_ID) AS
select NVL(SS.SD_id, SD.SS_id) S_ID, SD.OL_ID S_OL_ID
from sd
left join SS
on sd.OL_ID = SS.OL_ID
;