2013-07-05 45 views
0

我們使用SQL Server並且有Winforms應用程序。在我們的產品中,有時單筆交易中的記錄有時超過50000,我們在那裏面臨性能問題。正在更新帶有多個記錄的數據庫

當我們有大量的數據時,我們通常會在多個數據庫調用中這樣做。因此,在我們的導入功能之一中,我們正在更新一堆1000行的服務器。因此,如果我們有5000條記錄,那麼在處理它們時(在for循環中),我們更新前1000行,然後繼續處理,直到我們得到新的1000行更新。這表現更好,但實際上並不是我表現最好的。

但我們在與比1000當每5000行被賦予了較好的效果更新數據庫所以有我們面臨的,也代碼不看對面是同樣有很多困惑的其他導入/導出功能已經看到我們的應用。

任何人都可以給我一個想法是什麼讓這種情況發生。你沒有樣本數據,數據庫模式等,是的,我同意。但是在使用數據庫的時候應該注意/考慮哪些場景?爲什麼不同數量的記錄給我們帶來了好的結果,有沒有我們無視的東西?我不是數據庫中的冠軍,更不是.NET中的編程人員。很高興聽到您的建議。

不確定這是否有幫助,我們的數據通常包含員工詳細信息,如工資信息,個人詳細信息,權責發生權益,薪酬等。數據是從Excel中提供的,而且我們在內部流程中生成大量數據。如果您需要更多信息,請與我們聯繫。謝謝!!

+0

你必須添加更多信息。你執行1000個單更新或你用一個語句更新1000行?或者你在臨時表中插入1000行,然後更新其他表?爲了提高性能一般,避免您的查詢子選擇和多個手術室,提高你的鑰匙和索引,觸發器禁用,或者如果可能的話做了批量插入 – Koryu

回答

0

您擁有的數據庫標註越多,您需要的連接管理就越多(打開連接,使用連接,清理&關閉,我們是否使用連接池等)。您通過電匯發送的數據量相同,但您更頻繁地打開和關閉水龍頭,這會帶來開銷。

這樣做的缺點是事務中保存的數據量較大。但是,如果我可以提出建議,則可能需要考慮以不同方式實現此目的,方法是儘可能快地將所有數據加載到數據庫中(將臨時表中的限制條件取消激活並且使用事務性管理關掉,如果可能的話),然後允許數據庫進行檢查和驗證數據的任務。

由於您使用的SQL Server,你可以打開SQL事件探查器,定義一個適當的事件過濾器,並觀看不同負荷下會發生什麼。