任何人都可以解釋我們需要在存儲過程中使用臨時表的情況嗎?在存儲過程中需要臨時表的情況
1
A
回答
1
有很多情況下,一個複雜的連接可以真正跳過優化器,並使其做非常昂貴的事情。有時候,優化器最簡單的方法是將複雜的查詢分解爲更小的部分。你會發現很多有關使用@table變量而不是#temp表的錯誤信息,因爲@table變量總是存在於內存中 - 這是一個神話,不相信它。
如果您有一個離羣值查詢將真正受益於不在基表上的不同索引,並且您不允許(或可能有害)將該索引添加到基表(例如,它可能是一個備用聚簇索引)。解決這個問題的一種方法是將數據放入一個#temp表(它可能是基表的一個有限子集,就像一個已過濾的索引一樣),在#temp表上創建備用索引,然後運行聯接對#temp表。如果過濾到#temp表中的數據將被多次使用,則尤其如此。
還有些時候您需要針對某些數據進行多次更新,但您不希望多次更新基表。您可能需要對多種其他數據執行多項操作,而這些數據無法在一個查詢中完成。將受影響的數據放入#temp表中,執行一系列計算/修改,然後更新回基表而不是n次可能更有效。如果您在此處使用針對基表的事務,則可能會延長您的用戶鎖定時間。
另一個例子是,如果您使用的是鏈接服務器,並且跨服務器的連接變得非常昂貴。相反,您可以先將遠程數據填充到本地#temp表中,然後在本地創建索引,然後在本地運行查詢。
相關問題
- 1. 在此SQL存儲過程中真的需要臨時表嗎?
- 2. 如何在不聲明臨時表列的情況下將存儲過程的結果插入臨時表中
- 3. 存儲過程中的臨時表
- 4. MYSQL存儲過程,情況
- 5. 需要在存儲過程
- 6. 存儲過程臨時表問題?
- 7. 存儲過程 - 輸出臨時表
- 8. 存儲過程和臨時表
- 9. 存儲過程臨時表與參數
- 10. 臨時表和存儲過程編譯
- 11. SqlDataAdapter.FillSchema存儲過程,有臨時表
- 12. 如果情況在存儲過程
- 13. 在MySQL中找不到存儲過程中的臨時表
- 14. 在C#中使用存儲過程中的全局臨時表
- 15. 存儲過程返回一個臨時表,我需要轉換成CSV文件
- 16. 在MySQL存儲過程中創建的臨時表的範圍
- 17. 在MySQL中存儲過程結束時刪除臨時表
- 18. 針對存儲過程的情況?
- 19. 動態查詢在存儲過程中創建的臨時表
- 20. 存儲過程需要時間執行
- 21. 存儲過程中的MySQL臨時與內存表
- 22. 存儲過程不能刪除它不存在的臨時表
- 23. 存儲過程中的日期時間與臨時表排序
- 24. 存儲過程中的視圖vs臨時表中的SQL CTE
- 25. 如何將臨時表列存儲到存儲過程?
- 26. 存儲過程調用,一個奇怪的情況我現在面臨
- 27. 如何將存儲過程#1的結果存儲到存儲過程#2中的臨時表中
- 28. 如何使用臨時表在存儲過程中
- 29. 在Oracle存儲過程中使用臨時表
- 30. 在存儲過程中使用臨時表
有時候在性能方面可能會將複雜的查詢分解爲更小的部分。這是這個問題的解決方案。 http://stackoverflow.com/questions/5581965/sql-server-view-with-a-select-where-x-is-not-null-takes-ages-to-complete/5582058#5582058 –
你能解釋一下嗎?我舉例。 – Shine
在我鏈接的問題中有一個例子。 –