大家好!遇到一个问题。
在Tab1表中有一个字符类型字段A,日期类型字段B 。Tab1建有索引index,使用A列和B列。子查询中使用dense_rank()函数的情况:
select ... from Tab2 a left join 
(select ...,dense_rank() over (partition by A order by B) rq_xh from Tab1) b 
on ...
这条语句运行大概需要30S
父查询中使用dense_rank()函数的情况:
select ...,dense_rank() over (partition by b.A order by b.B) rq_xh
from Tab2 a left join Tab1 b on ...
这条语句运行大概需要2S请教大家,为什么两种情况运行时间差距那么大?

解决方案 »

  1.   

    那说明你TAB1和TAB2的数量相差比较大啊
    第一个语句是先用分析函数里对TAB1排序,然后再边左连接
    第二个语句是先左连接,再排序
    如果TAB2比较大,那排序时间就长喽
      

  2.   

    主要和tab2和tab1的数据量有关。
      

  3.   


    如果TAB2比较大,那排序时间就长喽。 是指第一个语句吗?
    如果这样的话,是否有什么解决方法呢?例如,将作为连接条件的字段做为Tab2的索引字段。