臨時表和記憶體表
阿新 • • 發佈:2018-12-26
前景
- mysql三種虛擬表
- 臨時表
- 記憶體表
- 檢視
臨時表
簡介:
臨時表是建立在系統臨時資料夾中的表。臨時表的資料和表結構都儲存在記憶體之中,退出的時候所佔的空間會被釋放
建立臨時表
create temporary table tmp_table(
name varchar(10) not ,
value int not
);
關鍵字為temporary
查看錶結構
注意:
show tables;
show table status
這兩個命令無法檢視臨時表。 但是可以查記憶體表
可以查看錶建立sql語句
show create table tmp_table;
直接將查詢結果匯入臨時表
CREATE TEMPORARY TABLE tmp_table SELECT * FROM table_name
設定臨時表大小
tmp_table_size臨時表的容量
臨時表的應用場景
當工作在十分大的表上執行時,執行相關查詢,來獲的一個大量資料的小的子集。較好的辦法,不是對整個表執行這些查詢,而是讓MySQL每次找出所需的少數記錄,將記錄選擇到一個臨時表,然後對這些表執行查詢
- 一個sql語句關聯兩個表以上的時候,查詢到的結果存放在臨時表中。
- 程式執行過程中可能需要存放一些臨時的資料,這些資料在整個程式的會話過程中都需要用的等等
- 臨時表預設的是MyISAM,但是可以修改
- 內部臨時表,就是查詢的時候,伺服器會優化查詢,使用內部臨時表。比如 order by 的列不是from中的第一列。
select *
from instructor natural join teaches
where dept_name='Accounting'
get到的新技能- - -檢視執行計劃
explain extended
select *
from instructor natural join teaches
where dept_name='Accounting'
- show warnings 能檢視優化查詢的sql語句
- explain extended能檢視執行使用的各種東西
臨時表的注意事項
- 臨時表只在當前連線可見,當這個連線關閉的時候,會自動drop。比如開啟mysql 就是一個連線會話。兩個不同的連線可以使用相同名字的臨時表,兩個表之間不存在什麼關係,如果臨時表的名字和已經存在的磁碟表名字一樣,那麼臨時表會暫時覆蓋磁碟表。就是說,你select 查詢,只會顯示臨時表裡面的,不會顯示磁碟表。
- 臨時表的儲存引擎:memor,myisam,merge,innodb
- 臨時表不支援,mysql cluster
- 同一個查詢語句,只能用一次臨時表,就是說不能將表和自己做連線等。
- 重命名錶,不能用rename 可以用alter table代替
- 如果超出了臨時表的容量,臨時表會轉換成磁碟表
alter table old_name rename new_name
記憶體表
簡介:
記憶體表的表結構建立在磁盤裡面,資料放在記憶體裡面,當mysql重啟之後,記憶體表的資料會丟失,表結構依舊存在會執行一次truncate操作
記憶體表的建立
CREATE TEMPORARY TABLE tmp_table (
name VARCHAR(10) NOT NULL,
value INTEGER NOT NULL
) TYPE = HEAP 注意: TYPE = HEAP必須要有
和臨時表不同的地方在於,多了個type=heap
使用場景及注意事項
記憶體表使用hash索引把資料儲存在記憶體中,具有更快的速度,可以用來快取。
- 記憶體表對所有的使用者連線都是可用的。這就意味著,多個會話連線的記憶體表名字不能重複,具有唯一性
- 記憶體表如果複製資料進去的話,所有的原有格式都不會存在,需要重新設定
- 重啟造成資料丟失,可以drop表之後重新複製資料等。這是最傻瓜的方法了。一定有更好的方法(待補充)
- 支援簡單的操作符>=<這三個,我認為記憶體表用來快取的話,應該不會涉及很複雜的操作。
- 不好的地方的話,應該在於資料了,因為資料都在記憶體裡,處理起來應該蠻麻煩
- 記憶體表的預設引擎是memory
總結
對比一下記憶體表和臨時表的一些主要區別吧
- 儲存
- 記憶體表 表結構儲存在磁碟中,資料儲存在記憶體中
- 臨時表 表結構和資料都儲存在記憶體中
- 會話
- 記憶體表 是可以多個會話共享的
- 臨時表 是單個會話獨享的,是會話級別的
- 引擎
- 記憶體表預設,memory
- 臨時表預設,myisam
- 斷開連線
- 臨時表 啥都不剩
- 記憶體表 只剩下表結構
- 效能
- 記憶體表由於所有的內容都是放在記憶體中,所以相對來說,速度較快但是同時資料的維護較為困難