大家好!遇到一个问题。
在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请教大家,为什么两种情况运行时间差距那么大?
在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请教大家,为什么两种情况运行时间差距那么大?
第一个语句是先用分析函数里对TAB1排序,然后再边左连接
第二个语句是先左连接,再排序
如果TAB2比较大,那排序时间就长喽
如果TAB2比较大,那排序时间就长喽。 是指第一个语句吗?
如果这样的话,是否有什么解决方法呢?例如,将作为连接条件的字段做为Tab2的索引字段。