exists和INNER JOIN 區別

今天幫開發人員優化SQL,發現一個以前不怎麼在意的問題

             SELECT
               bond.store_no
             FROM  
               bill_order_num_dtl bond 
             WHERE EXISTS
               ( select 1
                 from meetorder_staff_dtl b , 
                   meetorder_staff a 
                 where b.operate_area = bond.store_no
                   and a.seq_no = b.seq_no 
                   and  a.user_code = 'lym'  
                ) ;

查詢需要2S,bill_order_num_dtl 數據量大概2W多條,meetorder_staff_dtl 50條左右,將EXISTS換爲INNER JOIN後只需0.02S,差了100倍,EXISTS在命中率高的情況下查詢速度較快,像這種需要判斷的表的數據量較大,而條件表的數據量較少時不宜使用。INNER JOIN相對較穩定一些,不會隨命中率的變化而影響性能。改成下面後,只需0.02S

             SELECT  bond.store_no
             FROM   bill_order_num_dtl bond 
               INNER JOIN meetorder_staff_dtl b on b.operate_area = bond.store_no
               INNER JOIN  meetorder_staff a on a.seq_no = b.seq_no
             WHERE   
               a.user_code = 'lym'


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章