MySQL --儲存引擎介紹
xl_echo編輯整理,交流學習請加1280023003 百戰不敗,依不自稱常勝,百敗不頹,依能奮力前行。——這才是真正的堪稱強大!!!
在諸多資料庫管理系統中,資料引擎支援情況不一,並且引擎的種類也有很多,所以很多資料庫管理系統在引擎上都有一些自己的差異。MySQL的核心就是儲存引擎,並且MySQL提供了多個不同的儲存引擎。包括處理事務安全表的引擎和處理非事務安全表的引擎。
MySQL中的資料用各種不同的技術儲存在檔案(或者記憶體)中。這些技術中的每一種技術都使用不同的儲存機制、索引技巧、鎖定水平並且最終提供廣泛的不同的功能和能力。通過選擇不同的技術,你能夠獲得額外的速度或者功能,從而改善你的應用的整體功能。 --引自百度
從以上的話我們也可以看出,在MySQL中我們要儲存資料,並不是統一規範式的使用某一個引擎,而是可以針對我們需要需要的資料使用某些引擎(這裡主要以表為單位)。很多人在建立表時候都會去使用一個數據庫引擎InnoDB,該引擎是資料庫事務型首選引擎。在大部分時候都會用到,所以很多人會忽略。但是這很好的證明了,我們建立表可以選擇引擎。
使用InnoDB建立表示例:
CREATE TABLE `product` (
`product_id` varchar(32) NOT NULL,
`product_name` varchar(64) NOT NULL COMMENT '商品名稱',
` product_price` decimal(8,2) NOT NULL COMMENT '商品價格'
PRIMARY KEY (`product_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品表';
MySQL除了InnoDB還有那些引擎?
檢視當前提供支援的引擎
SHOW ENGINES
從顯示的結果我們可以看到,MySQL支援的引擎總共有8種。
InnoDB(儲存引擎)
事務型資料庫的首選引擎,支援ACID事務,支援行級鎖定。MySQL5.5之後InnoDB就成為了預設引擎。它的主要特徵有:
- 行鎖設計,並提供了有效的提交、回滾和資料恢復的功能。
- 支援MVCC(多版本併發控制)
- 支援外來鍵完整性約束
- 對於大量資料有著高效的效能
MyISAM(儲存引擎)
MyISAM是預設儲存引擎(Mysql5.1前)。它基於更老的ISAM程式碼,但有很多有用的擴充套件。MyISAM擁有較高的插入、查詢速度,但不支援事務。它的主要特徵有:
- 對於大檔案有很好的支援(如:儲存全國區域資訊)
- 當把刪除和更新及插入混合的時候,動態尺寸的行更少碎片。這要通過合併相鄰被刪除的塊,以及若下一個塊被刪除,就擴充套件到下一塊來自動完成。
- NULL值被允許在索引的列中。這個佔每個鍵的0-1個位元組。
- 所有數字鍵值以高位元組為先被儲存以允許一個更高地索引壓縮。
- BLOB和TEXT列可以被索引
MEMORY(儲存引擎)
memory儲存引擎是MySQL中的一類特殊的儲存引擎。其使用儲存在記憶體中的內容來建立表,而且所有資料也放在記憶體中。這些特性都與InnoDB,MyISAM儲存引擎不同。它的主要特徵有:
- memory不支援BLOB或TEXT
- 可以在一個memory表中有非唯一鍵
- memory儲存引擎執行hash和btree索引
MRG_MYISAM(儲存引擎)
引用MySQL官方文件中的一段話:MERGE儲存引擎,也被認識為MRG_MyISAM引擎,是一個相同的可以被當作一個來用的MyISAM表的集合."相同"意味著所有表同樣的列和索引資訊.你不能合併列被以不同順序列於其中的表,沒有恰好同樣列的表,或有不同順序索引的表.而且,任何或者所有的表可以用myisampack來壓縮
BLACKHOLE(儲存引擎)
MySQL在5.x系列提供了Blackhole引擎–“黑洞”.其作用正如其名字一樣:任何寫入到此引擎的資料均會被丟棄掉,不做實際儲存;Select語句的內容永遠是空。和Linux中的 /dev/null 檔案完成的作用完全一致。
CSV(儲存引擎)
MYSQL 5.0及以上版本支援CSV儲存引擎。CSV是MYSQL中相對比較簡單而且方便的儲存引擎了,它儲存資料直接會成為.csv格式的檔案。
ARCHIVE(儲存引擎)
這個儲存引擎基本上用於資料歸檔;它的壓縮比非常的高,儲存空間大概是innodb的10-15分之一所以它用來儲存歷史資料非常的適合,由於它不支援索引同時也不能快取索引和資料,所以它不適合作為併發訪問表的儲存引擎。
PERFORMANCE_SCHEMA(儲存引擎)
MySQL 5.5開始新增一個數據庫:PERFORMANCE_SCHEMA,主要用於收集資料庫伺服器效能引數