萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> mysql教程 >> mysql 臨時表和內存表創建 查詢 刪除以及注意事項

mysql 臨時表和內存表創建 查詢 刪除以及注意事項

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系統變量的 較小值 決定的

copyright © 萬盛學電腦網 all rights reserved