這更像是一個設計問題,但也與SQL優化有關。改進查詢設計以提高性能
我的項目必須將大量記錄導入數據庫(超過10萬條記錄)。同時,該項目有邏輯檢查每個記錄以確保它符合可配置的標準。然後它會將該記錄標記爲沒有警告或在數據庫中有警告。插入和警告檢查在一個導入過程中完成。
對於每個標準,它必須查詢數據庫。查詢需要加入其他兩個表,有時添加額外的嵌套查詢的條件內,如
select * from TableA a
join TableB on ...
join TableC on ...
where
(select count(*) from TableA
where TableA.Field = Bla) > 100
雖然查詢需要不明顯時間,查詢整個記錄集的花費相當量的時間,其可以是4 - 在服務器上5個小時。特別是如果有很多標準,最後項目將停止運行導入和回滾。
我試着將「SELECT * FROM」改爲「SELECT TableA.ID FROM」,但它似乎根本沒有任何效果。有沒有更好的設計來改善這個過程的性能?
我應該在哪裏製作臨時表? 「(從TableA選擇count(*),其中TableA.Field1 = Bla和TableA.Field2 = Blaa和...)」查詢也來自數據庫,所以我必須找出一種方法將其轉換爲臨時表。 – newguy 2011-05-09 05:53:09
我假設你正在分階段進行這項工作。首先,將100k行加載到「收件箱」表或登臺表中。接下來,您將通過一個或多個步驟從該表中拉出數據,以便將數據傳輸到最終目的地。因此,可以在存儲過程或應用程序代碼中創建臨時表。 – 2011-05-09 11:51:41