存盤引擎
1.基本介紹
- 基本介紹
-
MySQL的表型別由存盤引擎(Storage Engines)決定,主要包括MyISAM、innoDB、Memory等
-
MySQL資料表主要支持六種型別,分別是:CSV,Memory,ARCHIVE,MRG_MYISAM,MYISAM,InnoBDB,
-
這六種又分為兩類,一類是”事務安全型“(transaction-safe),例如:InnoDB,
剩下的五種都是第二類,稱為“非事務安全型”(non-transaction-safe)

資料庫中的表也應該有不同的型別,表的型別不同,會對應mysql不同的存取機制,表型別又稱為存盤引擎,
- 主要的存盤引擎(表型別)特點
| 特點 | Myisam | Memory | InnoDB | Archive |
|---|---|---|---|---|
| 存盤限制 | 沒有 | 有 | 64TB | 沒有 |
| 事務安全 | 支持 | |||
| 鎖機制 | 表鎖 | 表鎖 | 行鎖 | 行鎖 |
| B樹索引 | 支持 | 支持 | 支持 | |
| 哈希索引 | 支持 | 支持 | ||
| 全文索引 | 支持 | |||
| 集群索引 | 支持 | |||
| 資料快取 | 支持 | 支持 | ||
| 索引快取 | 支持 | 支持 | 支持 | |
| 資料可壓縮 | 支持 | 支持 | ||
| 空間使用 | 低 | N/A | 高 | 非常低 |
| 記憶體使用 | 低 | 中等 | 高 | 低 |
| 批量插入的速度 | 高 | 高 | 低 | 非常高 |
| 支持外鍵 | 支持 |
- 細節說明
- MyISAM不支持事務,也不支持外鍵,但是其訪問速度快,對事務完整性沒有要求
- InnoDB存盤引擎提供了具有提交、回滾和崩潰能力的事務安全,但是比起MyISAM存盤引擎,InnoDB寫得處理效率差一些,并且會占用更多的磁盤空間以保留資料和索引
- MEMORY存盤引擎使用存在記憶體中的內容來創建表,每個MEMORY表只實際對應一個磁盤檔案,MEMORY型別的表訪問非常地快,因為它的資料是存放在記憶體中的,并且默認使用HASH索引,但是一旦MySQL服務關閉,表中的資料就會丟失,表的結構還在,
2.使用
-
三種存盤引擎表使用案例
對于前面我們提到的三種存盤引擎,我們舉例說明
-- 表型別和存盤引擎
-- 查看所有的存盤引擎
SHOW ENGINES
-- InnoDB存盤引擎是前面使用過的
-- 1.支持事務 2.支持外鍵 3.支持行級鎖
-- myisam存盤引擎
CREATE TABLE t28(
id INT,
`name` VARCHAR(32)) ENGINE MYISAM
-- 1.添加速度快 2.不支持外鍵和事務 3.支持表級鎖
START TRANSACTION;
SAVEPOINT a;
INSERT INTO t28 VALUES(1,'jack');
SELECT * FROM t28;
ROLLBACK TO a; -- 失敗,myisam不支持事務
-- memory存盤引擎
-- 1.資料存盤在記憶體中[關閉了mysql服務表資料就會丟失,但是表結構還在]
-- 2.執行速度佷快(沒有IO讀寫) 3.默認支持索引(hash表)
CREATE TABLE t29(
id INT,
`name` VARCHAR(32)) ENGINE MEMORY
INSERT INTO t29 VALUES(1,'tom'),(2,'jack'),(3,'hsp');
SELECT * FROM t29;
-- 重啟mysql服務之后
DESC t29; -- 表結構還在
SELECT * FROM t29;-- 表資料丟失了
- 如何選擇表的存盤引擎
-
如果你的應用不需要事務,處理的只是基本的CRUD操作,那么MyISAM是不二選擇,速度快
-
如果需要支持事務,選擇InnoDB
-
Memory存盤引擎就是將資料存盤在記憶體中,由于沒有磁盤IO的等待,速度極快,但由于是記憶體存盤引擎,所做的任何修改在服務器重啟后都將消失,(經典用法:用戶的在線狀態)
- 指令修改存盤引擎
alter table table_name engine = 存盤引擎名;
例子
-- 表型別和存盤引擎
-- 查看所有的存盤引擎
SHOW ENGINES
-- InnoDB存盤引擎是前面使用過的
-- 1.支持事務 2.支持外鍵 3.支持行級鎖
-- myisam存盤引擎
CREATE TABLE t28(
id INT,
`name` VARCHAR(32)) ENGINE MYISAM
-- 1.添加速度快 2.不支持外鍵和事務 3.支持表級鎖
START TRANSACTION;
SAVEPOINT a;
INSERT INTO t28 VALUES(1,'jack');
SELECT * FROM t28;
ROLLBACK TO a; -- 失敗,myisam不支持事務
-- memory存盤引擎
-- 1.資料存盤在記憶體中[關閉了mysql服務表資料就會丟失,但是表結構還在]
-- 2.執行速度佷快(沒有IO讀寫) 3.默認支持索引(hash表)
CREATE TABLE t29(
id INT,
`name` VARCHAR(32)) ENGINE MEMORY
INSERT INTO t29 VALUES(1,'tom'),(2,'jack'),(3,'hsp');
SELECT * FROM t29;
-- 重啟mysql服務之后
DESC t29; -- 表結構還在
SELECT * FROM t29;-- 表資料丟失了
-- 修改存盤引擎名
ALTER TABLE t29 ENGINE = INNODB;
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/511993.html
標籤:MySQL
上一篇:開源直播課丨大資料集成框架ChunJun類加載器隔離方案探索及實踐
下一篇:SQL陳述句優化的30種方法
