我目前正在優化一個存儲過程,因爲它由於計算量和條目數量而超時。SQL Server性能臨時表或變量
但是,我不確定一個情況。使用8個臨時表(從數據庫中的其他數據中提取信息)或將數據庫中的數據放入各種變量並訪問它們最好?
哪個可以提供最佳性能來解決超時問題?
我目前正在優化一個存儲過程,因爲它由於計算量和條目數量而超時。SQL Server性能臨時表或變量
但是,我不確定一個情況。使用8個臨時表(從數據庫中的其他數據中提取信息)或將數據庫中的數據放入各種變量並訪問它們最好?
哪個可以提供最佳性能來解決超時問題?
取決於「temp」表中有多少個條目。
一個真正臨時表#temp
可以在其上定義的索引,它會由SQL Server爲它的行數等的分析,它確實參與交易,例如你可以插入行,然後回滾和這些行將從您的臨時TABL「消失」
變量@temp
總是由SQL Server被認爲是一個表,恰好有一個行 - 這不是一個問題,如果你有那麼幾個在那裏的行。但是,如果您需要存儲數百行,SQL Server查詢優化器的這種假設可能會導致效率極低的查詢計劃。另外:表變量做不參與事務 - 可以是一件好事 - 還是壞事 - 根據您的環境
1000+條目怎麼辦? – MasterP
@MasterP:在這種情況下,我可能會傾向於一個「真正的」臨時表('#temp'或'## temp') –
此基礎上,你一定要使用臨時表的迴應。你也應該看看索引他們來提高你的表現。
這不難測試嗎? – JeffO
你會在每個臨時表中預計多少行?另外,當你談論變量時,你是在談論表變量還是常規數據類型? – UnhandledExcepSean
可能有1000個條目,並且常規數據類型 – MasterP