使用Oracle View查询性能问题

时间:2016-06-23 16:56:45

标签: sql oracle oracle11g left-join

这可能很难理解(因为出于安全原因我必须含糊不清),但我会尝试解释我的困境。

我有两张桌子SD和SS。

SD与OL_ID列上的SS具有1对多的关系。

我正在创建一个带有SD和SS的视图,只有当SD记录没有关联的子SS记录时才返回SD.SD_ID值,否则它返回SS.SS_ID(创建一个物质视图不是一个选项)。 / p>

当我创建视图时,假设开头的NVL语句导致全表扫描,因此使视图执行速度非常慢。我已经修改了NVL语句,以便从记录中返回硬编码的数字而不是SD.SD_ID,并且查询时间大大减少。

这些表已被编入索引。我没有使用基于函数的索引,我不确定它在这种情况下是否有用。

基本上,我想知道我是否可以用NVL重写此查询:

  1. 可以删除,但目标仍然可以达到
  2. 可以优化NVL,从而缩短查询时间。
  3. 我会尽力回答任何问题,但我能提供的信息可能有限。任何重写的想法将不胜感激。效率不一定是目标,更多的改写绕过" 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
    ;
    

0 个答案:

没有答案