我有一個數據庫,這不是很快,我有一個大的CSV約65000行。我需要交叉檢查這些是否存在,並在需要時更新數據庫。C#crosscheck緩慢的數據庫與大型CSV
- 在CSV中,有一列包含數據庫ID。它總是1:1的關係。
- CSV可能會爲數據庫保存新的輸入,因此可能會發生沒有數據庫條目的情況。
- 我無法遍歷CSV並檢查每一行,因爲它太慢了。
- 首先獲取數據庫中的所有結果並將它們存儲爲每次循環都不起作用,因爲這會拉出大量的RAM。
我怎樣才能做到以下幾點:
- 檢查的CSV行有一個數據庫條目。如果是,請將其寫入另一個CSV文件。
- 如果該行沒有數據庫條目,則將其寫入其他文件。
- 保持5分鐘內的時間跨度,最好更短。
CSV有很多列(例如70),但我只需要列5來交叉檢查ID。我試圖先循環訪問CSV文件,然後用數據庫檢查它,但這太慢了。它可能需要10多分鐘。我也嘗試從數據庫中獲取所有條目,並循環訪問這些條目。隨着循環,運行CSV(使用BufferedStream
),並檢查它。這會顯着減少時間(最多5分鐘),但無法記錄數據庫中不存在的條目。
有什麼辦法可以在保持加速的同時做到這一點?
它是什麼樣的數據庫?如果它是一個關係數據庫,並且數據庫上的索引設置正確,那麼表中的id的select/update應該很快。 –
你對CSV有什麼控制權?你能刪除出現在數據庫中的記錄嗎? 數據庫ID的列是否遵循您可以利用的約定來節省時間?例如你能刪除所有的ID小於你添加到數據庫中的最後一個ID嗎? – Rawrgramming
@JohnKoerner這不是我的數據庫,我不能編輯它。它對我來說是隻讀的。我想這些指標並不是很好,或者根本沒有。我必須通過ODBC連接器進行連接。 –