爲什麼使用帶有SELECT語句的臨時表可以提高邏輯I/O數?它不會增加到數據庫的命中數量,而不是減少命中數量。這是因爲'問題'被分解成多個部分?我想知道幕後發生了什麼。臨時表和SQL SELECT性能
回答
沒有一般的答案。這取決於如何使用臨時表。
臨時表可以通過緩存在批次中多次使用的複雜過濾器/連接之後創建的行來減少IO。這樣,當只需要記錄的一個子集時,數據庫可以避免多次觸擊基表。
臨時表可能會增加IO,方法是存儲以後從未用過的記錄,或者佔用引擎緩存中可能被其他數據更好使用的大量空間。
創建臨時表以使用其所有內容一次比在主查詢中包含臨時查詢要慢,因爲查詢優化器無法看到臨時表並且強制(可能)不必要的數據spool而不是允許它從源表流式傳輸。
值得一提的是,只有當你的RAM或你的配置不允許使用磁盤這樣的gib memeory表時,normaly纔會將臨時表編譯爲類型爲MEMORY,這會降低臨時表的重要性。 – Rufinus 2009-08-07 00:59:25
據我所知,至少使用MySQL,TMP表保存在RAM中,使得選擇除任何撞擊HD快得多
有一類的地方建設的結果在收集結構在數據庫方面的問題比將結果的部分返回給客戶端更合適,每個部分往返。
例如:任意深度的遞歸關係(老闆)
還有另一個類的,其中數據是一概不的方式,有效地使得所述查詢的運行被索引的查詢的問題。將結果拉入可以自定義方式編入索引的集合結構中,將減少這些查詢的邏輯IO。
我將通過臨時表來假設您是指WHERE子句中的子選擇。 (這被稱爲半連接操作,通常您可以在查詢的文本執行計劃中看到該操作。)
當查詢優化器遇到子選擇/臨時表時,它會對做什麼做出一些假設與該數據。本質上,優化器將創建一個執行計劃,對子選擇的結果集執行連接,從而減少需要從其他表中讀取的行數。由於行數較少,查詢引擎能夠從磁盤/內存中讀取較少的頁面並減少所需的I/O數量。
- 1. SQL Server性能臨時表或變量
- 2. SQL Server臨時表的性能開銷
- 3. SQL臨時表和複製
- 4. 臨時表查殺性能
- 5. T-SQL動態SQL和臨時表
- 6. SQL Server的SELECT INTO和阻止隨着臨時表
- 7. SQL臨時表與物理(實際)表的性能
- 8. 表VS臨時表的性能
- 9. SQL:鎖定臨時表
- 10. sql 2005中的臨時表和事務
- 11. SQL臨時數據庫,臨時表和表之間的區別
- 12. T-SQL臨時表
- 13. 帶臨時表的Codeigniter SQL
- 14. SQL Server聯合臨時表
- 15. 如何INSERT INTO [臨時表] FROM [存儲過程]和SELECT * FROM [臨時表]
- 16. phpMyAdmin SQL - 臨時表
- 17. 不能刪除臨時表SQL
- 18. SQL 2005 - 臨時表問題
- 19. SQL性能緩慢(改進插入臨時表)
- 20. 如何調整臨時SQL Server表的性能
- 21. 臨時表存儲性能比較
- 22. MySQL的臨時表的性能
- 23. 性能調優與程序臨時表
- 24. SQL Server 2005臨時表
- 25. SQL臨時表變量
- 26. Sql臨時表除外
- 27. 臨時隊列的性能和侷限
- 28. 從臨時表導入SQL
- 29. 加入臨時表SQL Server
- 30. Sql select查詢性能
什麼DBMS?你在說什麼SQL - 粘貼它! – 2008-09-16 15:07:48