程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL如何使用臨時表

MySQL如何使用臨時表

編輯:MySQL綜合教程

MySQL如何使用臨時表   【臨時表存儲】 MySQL臨時表分為“內存臨時表”和“磁盤臨時表”,其中內存臨時表使用MySQL的MEMORY存儲引擎,磁盤臨時表使用MySQL的MyISAM存儲引擎; 一般情況下,MySQL會先創建內存臨時表,但內存臨時表超過配置指定的值後,MySQL會將內存臨時表導出到磁盤臨時表。  www.2cto.com     【使用臨時表的場景】 1)ORDER BY子句和GROUP BY子句不同, 例如:ORDERY BY price GROUP BY name;   2)在JOIN查詢中,ORDER BY或者GROUP BY使用了不是第一個表的列 例如:SELECT * from TableA, TableB ORDER BY TableA.price GROUP by TableB.name   3)ORDER BY中使用了DISTINCT關鍵字 ORDERY BY DISTINCT(price)   4)SELECT語句中指定了SQL_SMALL_RESULT關鍵字 SQL_SMALL_RESULT的意思就是告訴MySQL,結果會很小,請直接使用內存臨時表,不需要使用索引排序 SQL_SMALL_RESULT必須和GROUP BY、DISTINCT或DISTINCTROW一起使用 一般情況下,我們沒有必要使用這個選項,讓MySQL服務器選擇即可。   【直接使用磁盤臨時表的場景】 1)表包含TEXT或者BLOB列; 2)GROUP BY 或者 DISTINCT 子句中包含長度大於512字節的列; 3)使用UNION或者UNION ALL時,SELECT子句中包含大於512字節的列;   www.2cto.com   【臨時表相關配置】 tmp_table_size:指定系統創建的內存臨時表最大大小; http://dev.mysql.com/doc/refman/5.1/en/server-system-variables.html#sysvar_tmp_table_size   max_heap_table_size: 指定用戶創建的內存表的最大大小; http://dev.mysql.com/doc/refman/5.1/en/server-system-variables.html#sysvar_max_heap_table_size   注意:最終的系統創建的內存臨時表大小是取上述兩個配置值的最小值。   【表的設計原則】 使用臨時表一般都意味著性能比較低,特別是使用磁盤臨時表,性能更慢,因此我們在實際應用中應該盡量避免臨時表的使用。 如果實在無法避免,也應該盡量避免使用磁盤臨時表。   常見的方法有: 1)創建索引:在ORDER BY或者GROUP BY的列上創建索引,這樣可以避免使用臨時表; 2)分拆很長的列,可以避免使用磁盤臨時表:一般情況下,TEXT、BLOB,大於512字節的字符串,基本上都是為了顯示信息,而不會用於查詢條件,因此表設計的時候,應該將這些列獨立到另外一張表。  www.2cto.com     【如何判斷使用了臨時表】 使用explain查看執行計劃,Extra列看到Using temporary就意味著使用了臨時表。   MySQL官方手冊: http://dev.mysql.com/doc/refman/5.1/en/internal-temporary-tables.html       摘自 追夢人-技術博客

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved