2012-06-07 103 views
1

我目前正在優化一個存儲過程,因爲它由於計算量和條目數量而超時。SQL Server性能臨時表或變量

但是,我不確定一個情況。使用8個臨時表(從數據庫中的其他數據中提取信息)或將數據庫中的數據放入各種變量並訪問它們最好?

哪個可以提供最佳性能來解決超時問題?

+1

這不難測試嗎? – JeffO

+0

你會在每個臨時表中預計多少行?另外,當你談論變量時,你是在談論表變量還是常規數據類型? – UnhandledExcepSean

+0

可能有1000個條目,並且常規數據類型 – MasterP

回答

1

取決於「temp」表中有多少個條目。

  • 一個真正臨時表#temp可以在其上定義的索引,它會由SQL Server爲它的行數等的分析,它確實參與交易,例如你可以插入行,然後回滾和這些行將從您的臨時TABL「消失」

  • 變量@temp總是由SQL Server被認爲是一個表,恰好有一個行 - 這不是一個問題,如果你有那麼幾個在那裏的行。但是,如果您需要存儲數百行,SQL Server查詢優化器的這種假設可能會導致效率極低的查詢計劃。另外:表變量做參與事務 - 可以是一件好事 - 還是壞事 - 根據您的環境

+0

1000+條目怎麼辦? – MasterP

+0

@MasterP:在這種情況下,我可能會傾向於一個「真正的」臨時表('#temp'或'## temp') –

0

此基礎上,你一定要使用臨時表的迴應。你也應該看看索引他們來提高你的表現。