MySQL儲存引擎memory和merge介紹
一. memory儲存引擎
memoery儲存引擎是在記憶體中來建立表,每個memory表只實際對應一個磁碟檔案格式是.frm. 該引擎的表訪問非常得快,因為資料是放在記憶體中,且預設是hash索引,但服務關閉,表中的資料就會丟失掉。
-- 下面建立一個memory表,並從city表獲得記錄
CREATE TABLE tab_memory ENGINE=MEMORY
SELECT city_id,country_id FROM city GROUP BY city_id
-- 給momory 表建立索引時,可以指定是hash索引還是btree索引
CREATE INDEX mem_hash USING HASH ON tab_memory(city_id);
SHOW INDEX FROM tab_memory
DROP INDEX mem_hash ON tab_memory;
CREATE INDEX mem_hash USING BTREE ON tab_memory(city_id)
SHOW INDEX FROM tab_memory
總結:伺服器需要足夠的記憶體來維護所有在同一時間使用的memory表,當不再需要時,要釋放,應執行 delete from 或 truncate table 或刪除表drop table。
每個memory表放置的資料量大小,受到max_heap_table_size系統變數的約束,初始值是16MB. 通過max_rows 子句指定表的最大行數。
memory型別 一般應用於臨時表,如統計操作的中間結果表。
二. merge 儲存引擎
merge 引擎是一組MyISAM表的組合,這些MYISAM表必須結構完全相同,merge表本身並沒有資料,對錶的增刪改查 實際是對內部的myisam表進行操作。
對於merge型別表的插入操作有三種類型:first是插入在第一個表,last是插入到最後一個表,不定義或為NO表示不能對merge表執行插入操作,對於merge表的drop操作,內部的表沒有任何影響。merge 在磁碟上保留兩個檔案,一個是.frm檔案儲存表定義,另一個是.mrg檔案包含組合表的資訊。
-- 下面來測試下,建立三個結構相同的表 payment_2006,payment_2007,payment_all(merge型別)。
CREATE TABLE payment_2006(
country_id SMALLINT,
payment_date DATETIME,
amount DECIMAL(15,2),
KEY inx_fx_country_id (country_id)
)ENGINE =MYISAM
CREATE TABLE payment_2007(
country_id SMALLINT,
payment_date DATETIME,
amount DECIMAL(15,2),
KEY inx_fx_country_id (country_id)
)ENGINE =MYISAM
CREATE TABLE payment_all(
country_id SMALLINT,
payment_date DATETIME,
amount DECIMAL(15,2),
INDEX (country_id)
)ENGINE =MERGE UIO/">NION=(payment_2006,payment_2007) INSERT_METHOD=LAST;
-- 分別向payment_2006和payment_2007表插入資料
INSERT INTO payment_2006 VALUES(1,'2006-05-01',100000),(2,'2006-08-01',150000);
INSERT INTO payment_2007 VALUES(1,'2007-05-01',200000),(2,'2007-08-01',350000);
-- 查詢payment_all
SELECT * FROM payment_all;
下圖發現該paymnet_all表合併了二表的結果集:
-- 下面向payment_all表插入資料 表定義是INSERT_METHOD=LAST;
INSERT INTO payment_all VALUES(3,'2006-05-01',112000);
-- 查詢
SELECT * FROM payment_2007;
總結: MERGE表並不能智慧地將記錄寫到對應的表中,而分割槽表是可以的,通常我們使用merge表來透明地對多個表進行查詢和更新操作。
三..如何選擇合適的儲存引擎
myisam: 如果應用是以讀操作和插入操作為主,只有很少的更新和刪除操作,並且對事務的完整性,併發性要求不是很高,例如資料倉儲。
innodb: 用於事務處理應用程式,支援外來鍵,對事務的完整性較高,併發條件下資料一致性,包括很多的更新和刪除操作,它能避免刪除和更新導致的鎖定,還提供了提交和回滾,例如計算費用對資料準確性要求高的。
memory: 資料儲存在ram(記憶體)中,訪問速度快,但對錶的大小有限制,要確保資料是可以恢復的,常用於更新不太頻繁的小表,用以快速訪問。
merge: 它是myisam表以邏輯方式組合的引擎,將myisam表分佈在多個磁碟上,可以有效改善merge表的訪問效率。例如資料倉儲等。
Linux公社的RSS地址 : ofollow,noindex" target="_blank">https://www.linuxidc.com/rssFeed.aspx
本文永久更新連結地址: https://www.linuxidc.com/Linux/2018-09/154349.htm