2011-09-27 55 views
1

我一直在想,什麼是這兩種情況之間的複雜性差異:複雜性差之間Where子句內查詢和Where子句中的條件性拆分在SSIS

案例1:OLE DB源查詢,這樣寫的:

select * 
from A 
where A.value > 1 

案例2:OLE DB源查詢,where子句放在條件性拆分

select * from A 

與OLE DB後,條件性拆分源查詢,其中包含:值> 1.

性能方面,它有什麼區別嗎?而對於更復雜的查詢,它是否也有重要影響?

回答

3

是的,有性能差異。

情況2將返回表A中的所有數據記錄,並將它們存儲在SSIS內存緩衝區中,然後再將它們傳遞給條件拆分組件進行過濾。

情況1立即將較小的數據集返回給SSIS內存緩衝區。

進一步的閱讀看一看:

+2

+1總是讓SQL語句消除不必要的行。當數據流任務在數據庫引擎上的功能會比刪除行,刪除重複項或排序數據時更少。 – brian

1

SSIS的主要用途是導入/導出與來自異構源/(如文本文件,Excel電子表格等)。在將數據加載到服務器之前,可以進行某種驗證,並且可以在某處記錄「錯誤」的記錄。 但是,如果您打算只將SSIS與SQL查詢一起使用,並且沒有任何驗證或錯誤日誌記錄在文本文件中,則應該尋找其他解決方案(鏈接服務器,OPENROWSET等)。

但是,如果你仍然在看SSIS,你應該在SQL查詢或數據源中包含所有可能的邏輯。

有一篇關於如何使用SSIS準備快速提取:http://www.sqllion.com/2009/04/faster-extraction-loading-by-ssis/

Try to avoid type casting or manipulating data types inside the SSIS package as it is an additional overhead for SSIS. Do it prior to the package or do typecasting in the source query of OLE DB Source component.