mysql 臨時表和內存表創建 查詢 刪除以及注意事項 臨時表和內存表的ENGINE 不同,臨時表默認的是MyISAM,而內存表是MEMORY ,臨時表只對當前會話可見,連接斷開時,自動刪除!
mysql教程 臨時表和內存表創建 查詢 刪除以及注意事項
臨時表和內存表的engine 不同,臨時表默認的是myisam,而內存表是memory ,臨時表只對當前會話可見,連接斷開時,自動刪除!
你不必擔心所創建的臨時表的名稱會和其他會話建立的臨時表、或非臨時表沖突!注意如果你的臨時表和正常表名稱相同,正常表會被隱藏——如同全局變量和局部變量那樣
創建臨時表不會引發通常的commit事務提交
臨時表
create temporary table tmp_table
創建一個臨時表
create temporary table tmp_table ( name varchar(10) not null, value integer not null )
向臨時表入數據
create temporary table tmp_table select * from table_name
臨時表將在你連接mysql期間存在。當你斷開時,mysql將自動刪除表並釋放所用的空間。當然你可以在仍然連接的時候刪除表並釋放空間
也可以利用語句刪除
drop table tmp_table
引擎類型只能是:memory(heap)、myisam、merge、innodb
不支持mysql cluster
同一個查詢語句中只能引用一次! 如 select * from tp_table , tp_table as alias_name; 是錯誤的
同一個用戶存儲函數中只能引用一次!
show tables 不會顯示臨時表
不能使用rename重命名臨時表。只能使用alter table old_tp_table_name rename new_tp_table_name;
影響使用replication功能
實例
內存表
mysql> create table tmp2(id int not null) type=heap;
實例
create temporary table tmp_table ( name varchar(10) not null, value integer not null ) type = heap
那麼速度方面呢(即myisam和memory之間的區別)?
實驗開始:
實現手段:對基於2張千萬級別的表做一些olap切分操作,中間表的建立使用2種不同的方式。最後把中間表的數據按照要求取出,插入到結果表中
實驗目的;測試臨時內存表和臨時表的速度
1.中間表的建立使用create temporary table type = heap 即 把中間表建立成臨時內存表
2.中間表直接使用create temporary table建立
實驗結果:
臨時內存表: 1小時
1 2008-09-25 11:03:48
1 2008-09-25 12:03:39
臨時表:1小時17分鐘
2 2008-09-25 12:25:28
2 2008-09-25 13:42:37
由此發現memory比myisam快大概20%
mysql服務器會自動創建內部臨時表:該臨時表可以是只存在於內存的memory臨時表,或者是存儲於硬盤的myisam臨時表;而且 初始創建的memory臨時表由於表的增大 可能會轉變為myisam臨時表——其轉化臨界點由max_heap_table_size 和tmp_table_size系統變量的 較小值 決定的