2015-05-23 204 views
2

我有這樣一羣查詢:SQL SELECT查詢性能提高

-- get all data that exists in source but not yet in destination 
SELECT 
* 
INTO #temp 
FROM source T010T 
WHERE NOT EXISTS 
       (
       SELECT TOP 1 1 FROM destination P510T 
       WHERE WH_CD = T010T.WH_CD 
       AND POS_NO = T010T.POS_NO 
       AND SLIP_NO = T010T.TRAN_NO 
       AND OPE_DATE = T010T.SL_REC_DATE 
       ) 
-- process the data 
.... 
-- insert data into destination 
Insert into destination select * From #temp 

我不知道會的做法這樣會影響性能?因爲我沒有真正的數據來測試,而且這是在本地運行的,所以我有點害怕,在實現時,這些查詢將成爲@@!中的一個痛點!

有沒有更好的選擇?

P/S:在比較中使用兩個表的列都是主鍵primarykey(wh_cd,pos_no,slip_no,ope_date) ...

+0

與* –

+0

@GiorgiNakeuri更換前11怎麼樣'1'代替'*'?順便說一句,如果使用'*'應該是這樣的:'where wh_Cd + pos_no + ..不在(從源選擇wh_Cd + pos_no + ..) – EagerToLearn

+0

否*與1或6或'blabla'相同。如果表中有ro,則不需要頂層。這可能會影響表演。 –

回答

1

Left Join,而不是嘗試:

SELECT 
* 
INTO #temp 
FROM source T010T 
LEFT JOIN destination P510T 
       ON WH_CD = T010T.WH_CD 
       AND POS_NO = T010T.POS_NO 
       AND SLIP_NO = T010T.TRAN_NO 
       AND OPE_DATE = T010T.SL_REC_DATE 
WHERE P510T.WH_CD IS NULL 
+0

謝謝,看起來更好 – EagerToLearn