问题SQL有7个表连接并按特定值排序(约50个值)
select a.col1 ~~
/*+ skip */
from tab1 a
left outer join tab2 b on b.tab2_col1 = a.tab1_col2
left outer join tab3 c on c.tab3_col1 = c.tab1_col2
left outer join tab4 d on d.tab4_col1 = a.tab1_col2
left outer join tab5 e on a.tab5_col1 = d.tab4_col2
left outer join tab6 f on f.tab6_col1 = a.tab1_col1
and f.tab6_col3 = 'Y' and f.tab6_col4 ='A'
left outer join tab7 g on g.tab7.col1 = f.tab6_col2
where a.col1 in ( == about 50 values == )
order by fields( a.col1, == about 50 values == )
第一次:3秒
第二次:低于0.1秒
table tab1 ( about 17,000,000 rows )
tab1_col1 --- PK , auto increment
tab1_col2
tab1_col3
...
table tab2 ( about 10,000,000 rows )
tab2_col1 -- PK
tab2_col2 -- PK
tab2_col3 -- PK
table tab3 ( about 2,000,000 rows )
tab3_col1 -- PK
tab3_col2
tab3_col3
table tab4 ( about 3,000,000 rows )
tab4_col1 -- PK
tab4_col2 -- PK
tab4_col3
table tab5 ( about 400 rows )
tab5_col1 -- PK
tab5_col2 -- PK
tab5_col3
table tab6 ( about 30,000,000 rows )
tab6_col1 -- PK
tab6_col2 -- PK
tab6_col3
tab6_col4
table tab7 ( about 2,000,000 rows )
tab7_col1 -- PK
tab7_col2
tab7_col3
第一个表访问类型是'范围' - 按主键 或许在声明中做到了 因此,通过主键'按'排序'使用文件排序' 是对的吗?
如果是对的,我该如何提高sql的性能?