2011-01-12 49 views
3

我目前正在研究一個將舊數據庫轉換爲新的樣式的程序,我已經分配的一個任務是刪除一些舊的二進制列並將它們轉換爲我們存儲庫中的文檔。.NET - 在查詢完成之前從DataReader開始讀取?

我們在表格中有大約110萬行,我的過程大約需要12個小時才能完成。

我正在尋找方法使這一切都變得更快一點,我正在看的一件事是更快地獲取數據。如果有方法可以在完成之前查看我的查詢結果?我注意到,當我在查詢分析器中對這個表運行「select *」語句時,我立即開始獲取結果,但是當我在.NET中使用ExecuteReader時,查詢似乎需要大約30分鐘才能開始讀取行。

+0

你的代碼是什麼樣的?這聽起來像你在非索引列上進行了大量的查詢。在一個數百萬列上進行簡單的SELECT過濾,即使是數百萬列,也應該快速,並且使用ExecuteReader。 – 2011-01-13 00:30:27

+0

也許你可以嘗試將你的查詢分解成更少的行並運行一些線程來處理它們? – clyc 2011-01-13 01:26:20

回答

1

這可能有助於使用command.ExecuteReader(CommandBehavior.SequentialAccess)。但是,這樣做需要您按順序讀取列,並要求以不同方式讀取二進制值。我建議您使用reading the documentation on SequentialAccess,以便您瞭解可能需要對代碼進行哪些更改。

請考慮在查詢分析器中立即運行相同的查詢。這告訴我,查詢本質上不需要30分鐘來返回第一個結果,或者它會在查詢分析器中這樣做。我認爲處理大的二進制值是解釋這種差異的一個可能原因。測試的一個快速方法是更改​​查詢以選擇除二進制列之外的所有內容,並查看是否更改了ExecuteReader執行的時間。如果沒有二進制列的執行時間相同,那麼SequentialAccess不太可能有幫助。如果沒有二進制列更快,那麼SequentialAccess可能值得使用。

相關問題