使用文件排序性能的mysql顺序

时间:2018-02-26 05:38:05

标签: mysql sorting filter

SQL性能

问题SQL有7个表连接并按特定值排序(约50个值)

SQL

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 == )

SQL已用时间

第一次:3秒

第二次:低于0.1秒

TABLE DESC

 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 

解释

enter image description here

问题

第一个表访问类型是'范围' - 按主键      或许在声明中做到了      因此,通过主键'按'排序'使用文件排序'      是对的吗?

如果是对的,我该如何提高sql的性能?

0 个答案:

没有答案