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~