我在以下情況下提高性能感興趣的見解:確定分配給用戶的實體數據庫性能
我目前的工作,因爲它有層次實體結構,其中,根據用戶的級別的應用程序在組織內部,他們將在特定層次上爲特定實體分配任務 - 從而可以訪問其所有子女(本例中位於美國各地區內的建築物)。大多數超級用戶的投資組合中會有20,000個以上的個體實體,其中一些實體的數量多達40,000個。
我們不需要詳細描述,只需要一點點邏輯即可確定用戶有權訪問的所有實體。該邏輯當前使用95%的存儲過程中使用的表函數進行處理。平均存儲過程不超過1 - 2秒即可運行。但是,在調用10多個不同存儲過程的ASP.Net頁面中,性能迅速增長到20多秒。
作爲一種替代方法,我們只考慮一次(登錄時)調用此表函數並將結果存儲在表中(在清除了同一用戶的任何先前值之後)。然後,我們會讓所有的存儲過程引用這個新表而不是表函數。一項測試顯示,從新表中選擇一個耗時15秒的頁面可能會在不到3秒的時間內渲染。
例如:在
- 用戶日誌刪除該用戶的所有實體表
- 系統插入該用戶的所有實體,然後
- 系統發出他們自己的快樂方式不再運行當前會話的表格功能
我們的con cern認爲,由於行級別鎖定,數百名用戶可能會持續登錄和退出應用程序,因此經常刪除和插入此表可能會導致嚴重的性能下降。有沒有其他人以這種方式使用SQL表?如果是這樣,我們應該關注性能低下,因爲從一個表中不斷插入和刪除。
這是你可以存儲在內存中的每個用戶,在會話中的東西嗎? –
我想保留在數據庫中,以避免必須向所有存儲的特效添加參數。這將節省很多時間來創建一個新表格並指出當前的功能。 – jumpdart