在我們的網絡應用程序中,我們在數據庫中創建會話表以存儲臨時數據。所以臨時表將爲每個用戶創建和銷燬。我有這個網絡應用程序的約300個用戶。因此,對於每個用戶,這些表格將被創建和銷燬。將臨時數據存儲在臨時表中的替代方法是什麼?
我聽說由於性能問題,這種設計方式並不好。 我正在使用MS Sql服務器2005.有什麼方法可以臨時存儲結果集而不創建任何表。
請給我一些解決方案。 謝謝。
在我們的網絡應用程序中,我們在數據庫中創建會話表以存儲臨時數據。所以臨時表將爲每個用戶創建和銷燬。我有這個網絡應用程序的約300個用戶。因此,對於每個用戶,這些表格將被創建和銷燬。將臨時數據存儲在臨時表中的替代方法是什麼?
我聽說由於性能問題,這種設計方式並不好。 我正在使用MS Sql服務器2005.有什麼方法可以臨時存儲結果集而不創建任何表。
請給我一些解決方案。 謝謝。
我認爲,在GenerateData的解決方案是,你在找什麼。您可以創建測試/示例數據庫,並在需要時刪除它們。
根據你實際在做什麼(以及是否可以重構它),使用通常具有高性能的table variables可能更合適。
有一個問題,即數據庫是否真的是一個合適的地方,甚至試圖持久保存數據集,如果它是爲了您的應用程序的好處 - 如果問題不僅僅是學術問題,也可能更好地保持對象表示你的應用內存中的數據?
或者:
使用一個永久數據庫表中的所有用戶,用用戶名欄上
或
過濾器只需使用會話處理您的網絡平臺來存儲信息的能力
聽起來好像你正在創建和刪除永久表。你有沒有嘗試過使用真正的臨時表(那些表名以#開頭的)。 OR表變量,如果你有一個小的數據集。其中任何一個都可以很好地工作。如果使用實際的臨時表,則需要確保tempdb的大小足夠容納通常的用戶數量,增長的tempdb可能會導致延遲。
您還需要確保與數據庫的連接得以維護,否則臨時表將進入ka-puts。爲了讓它稍微寬鬆一些,可能需要查看全局臨時表。 – 2010-07-15 13:55:31
這聽起來像是你的意思是你正在爲臨時目的而不是實際的臨時表創建一個永久表? – 2010-07-15 13:43:14
我正在創建類似 ;與人一樣{ select * from emloyee } 這是僅存在於該會話中的權限? – Manoj 2010-07-16 08:14:32
';將人員作爲{select * from emloyee}'稱爲公用表表達式(CTE),並不是真正的「表格」或「臨時表格」,它只包含當前命令的範圍。 – 2010-07-16 12:20:13