本文更新于2019-06-23,使用MySQL 5.7,作業系統為Deepin 15.4,
目錄- InnoDB
- MyISAM
- MERGE
- MEMORY
- NDB
- 常用存盤引擎對比
和大多數資料庫不同,插件式存盤引擎是MySQL最重要的特性之一,
InnoDB
InnoDB表提供事務安全,
InnoDB表支持外鍵,創建外鍵時,要求父表必須有對應的索引,子表在創建外鍵時也會自動創建對應的索引,如父表被子表創建了外鍵索引,則父表的索引禁止被洗掉,在匯入多個表的資料時,或在執行LOAD DATA或ALTER TABLE操作的時候,可以使用SET foreign_key_checks=0關閉外鍵檢查,執行完后,使用SET foreign_key_checks=1重新打開,
InnoDB表自動增長列必需是索引,或組合索引的第一列,
InnoDB存盤表和索引有以下兩種方式:
- 使用共享表空間存盤:表結構保存在.frm檔案中,資料和索引保存在
innodb_data_home_dir和innodb_data_file_path定義的表空間中,可以是多個檔案, - 使用多表空間存盤:表結構保存在.frm檔案中,每個表的資料和索引單獨保存在.ibd檔案中,如果是磁區表,則每個磁區對應單獨的.ibd檔案,檔案名為“表名+磁區名”,可以在創建磁區的時候指定每個磁區的檔案位置,共享表空間仍然是必須的,InnoDB把內部資料詞典和在線重做日志放在共享表空間中,
使用引數innodb_file_per_table可指定是否使用多表空間存盤,并在重啟服務器后,只且只對新建的表生效,使用多表空間存盤的表,不能直接復制.frm和.ibd檔案進行恢復,因為沒有共享表空間的資料字典資訊,但如恢復表到原來的資料庫,可使用ALTER TABLE tablename DISCARD TABLESPACE和ALTER TABLE tablename IMPORT TABLESPACE,
InnoDB表沒有表元資料的快取(如行數,因而執行COUNT(*)較慢),
MyISAM
MyISAM表不支持事務,也不支持外鍵,
MyISAM表自動增長列可為組合索引的非第一列,
每個MyISAM在磁盤上存盤成3個檔案,資料檔案和索引檔案可以放置在不同的目錄(需在創建表時通過DATA DIRECTORY和INDEX DIRECTORY指定),其檔案名和表名相同,擴展名分別是:
- .frm:存盤表定義,
- .MYD:MYData,存盤資料,
- .MYI:MYIndex,存盤索引,
MyISAM表支持3種不同的存盤格式:
- 靜態表:默認的存盤格式,每條記錄都是固定長度的,
- 動態表:記錄不是固定長度的,包含變長欄位,
- 壓縮表:由myisampack工具創建,每條記錄都被單獨壓縮,
MyISAM表有表元資料的快取(如行數,因而執行COUNT(*)較快),
MERGE
MERGE表是一組MyISAM表的組合,這些MyISAM表必須結構完全相同,MERGE表本身并沒有資料,對其的任何操作實際上是對內部MyISAM表進行的,可以對MERGE表進行DROP操作,其只是洗掉表定義,對內部的表沒有影響,
MERGE表在磁盤中保存兩個檔案,檔案名以表名開始,.frm存盤表定義,.MRG包含組合表的資訊,包括MERGE表由哪些表組成、插入新資料時的依據,可以通過修改.MRG檔案來修改MERGE表,但修改后需使用FLUSH TABLES重繪,
MEMORY
MEMORY表的資料放在記憶體中,每個MEMORY表只對應一個.frm磁盤檔案,
在啟動MySQL服務時使用--init-file選項,把INSERT INTO ... SELECT或LOAD DATA INFILE寫入檔案中,就可在服務啟動時從持久穩固的資料源裝載表,定義MEMORY表的時候可通過MAX_ROWS指定表的最大行數,
NDB
NDB存盤引擎在MySQL Cluster中使用,
常用存盤引擎對比
| 特點 | InnoDB | MyISAM | MERGE | MEMORY | NDB |
|---|---|---|---|---|---|
| 存盤限制 | 64TB | 有 | 沒有 | 有 | 有 |
| 事務安全 | 支持 | ||||
| 鎖機制 | 行鎖 | 表鎖 | 表鎖 | 表鎖 | 行鎖 |
| B樹索引 | 支持 | 支持 | 支持 | 支持 | 支持 |
| 哈希索引 | 支持 | 支持 | |||
| 全文索引 | 支持 | ||||
| 集群索引 | 支持 | ||||
| 資料快取 | 支持 | 支持 | 支持 | ||
| 索引快取 | 支持 | 支持 | 支持 | 支持 | 支持 |
| 資料可壓縮 | 支持 | ||||
| 空間使用 | 高 | 低 | 低 | N/A | 低 |
| 記憶體使用 | 高 | 低 | 低 | 中等 | 高 |
| 批量插入速度 | 低 | 高 | 高 | 高 | 高 |
| 支持外鍵 | 支持 |
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/19748.html
標籤:MySQL
上一篇:MySQL-操作陳述句
