2010-07-15 209 views
0

在我們的網絡應用程序中,我們在數據庫中創建會話表以存儲臨時數據。所以臨時表將爲每個用戶創建和銷燬。我有這個網絡應用程序的約300個用戶。因此,對於每個用戶,這些表格將被創建和銷燬。將臨時數據存儲在臨時表中的替代方法是什麼?

我聽說由於性能問題,這種設計方式並不好。 我正在使用MS Sql服務器2005.有什麼方法可以臨時存儲結果集而不創建任何表。

請給我一些解決方案。 謝謝。

+0

這聽起來像是你的意思是你正在爲臨時目的而不是實際的臨時表創建一個永久表? – 2010-07-15 13:43:14

+0

我正在創建類似 ;與人一樣{ select * from emloyee } 這是僅存在於該會話中的權限? – Manoj 2010-07-16 08:14:32

+0

';將人員作爲{select * from emloyee}'稱爲公用表表達式(CTE),並不是真正的「表格」或「臨時表格」,它只包含當前命令的範圍。 – 2010-07-16 12:20:13

回答

0

認爲,在GenerateData的解決方案是,你在找什麼。您可以創建測試/示例數據庫,並在需要時刪除它們。

0

根據你實際在做什麼(以及是否可以重構它),使用通常具有高性能的table variables可能更合適。

有一個問題,即數據庫是否真的是一個合適的地方,甚至試圖持久保存數據集,如果它是爲了您的應用程序的好處 - 如果問題不僅僅是學術問題,也可能更好地保持對象表示你的應用內存中的數據?

+0

如果數據集很大,臨時表實際上往往比表變量更好。 – HLGEM 2010-07-15 13:44:37

+0

這將如何持續多個頁面調用? – 2010-07-15 13:45:08

+1

@KM - 它不會,但我沒有看到需要它的需求。坦率地說,如果你出於商業原因堅持數據集,我通常在業務邏輯中這樣做,而不是在存儲庫中。 – annakata 2010-07-15 13:47:30

2

或者:

使用一個永久數據庫表中的所有用戶,用用戶名欄上

過濾器只需使用會話處理您的網絡平臺來存儲信息的能力

+0

提供更多信息,第二個可能就是他真正想要的。將數據集發送到Web平臺並通過會話維護數據。 – HLGEM 2010-07-15 13:51:24

+0

但我正在使用觸發器內的結果集。在觸發器內部,我使用臨時結果集進行進一步處理。 – Manoj 2010-07-16 08:18:04

+0

@Manoj說'但我使用觸發器內的結果集,爲什麼哦爲什麼你沒有一次在問題中提到'trigger'?您只需在問題中加入「網絡應用程序」和「會話」,從而進一步掩蓋了真正的問題。我不知道你的問題在問什麼,請編輯你的問題,以更清楚地說明這裏發生了什麼! – 2010-07-16 12:18:16

1

聽起來好像你正在創建和刪除永久表。你有沒有嘗試過使用真正的臨時表(那些表名以#開頭的)。 OR表變量,如果你有一個小的數據集。其中任何一個都可以很好地工作。如果使用實際的臨時表,則需要確保tempdb的大小足夠容納通常的用戶數量,增長的tempdb可能會導致延遲。

+0

您還需要確保與數據庫的連接得以維護,否則臨時表將進入ka-puts。爲了讓它稍微寬鬆一些,可能需要查看全局臨時表。 – 2010-07-15 13:55:31