SQL優化-二個資料表-IN

SQL優化-二個資料表-IN

這是長久困擾我們的問題,

如何有效控制二個資料表之間的關係,

原本我們是在資料表中用欄位註記狀態,

但是,我們程式都是3-tier架構,

很容易造成欄位註記失敗(很少,但就是會發生),

為了正確性,我們最後用「not in」的SQL語法處理,

雖然效率慢,但資料正確性達99%。

 

可是人算不如天算,

相關資料表越長越大,

終於,查詢語法慢到被客戶投訴,

而針對SQL語法做優化,

將SQL用「left join」、「group by」結合,

成果出乎意料的好,

以下為簡易範例,

供大家討論(搞不好還可以更快)

原本:

select * from TBA a
where a.aid not in  (select bid from TBB where isnull(bid ,'')<>'' group by bid )

改善:

select a.* from TBA a left join (select bid from TBB where isnull(bid ,'')<>'' group by bid ) b on a.aid =b.bid where isnull(b.bid ,'')='' 

 

自我LV~