Mysql5.7支持的存儲引擎有: InnoDB,MyISAM,Memory,Merge,Archive,Federated,CSV,BLACKHOLE等
可以使用SHOW ENGINES語句查看系統(tǒng)所支持的引擎類型
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
| BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO |
| MyISAM | YES | MyISAM storage engine | NO | NO | NO |
| CSV | YES | CSV storage engine | NO | NO | NO |
| ARCHIVE | YES | Archive storage engine | NO | NO | NO |
| PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |
| FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
9 行于數(shù)據(jù)集 (0.01 秒)
Support列的值表示某種引擎是否能使用; YES表示可以使用,No表示不能使用,Default表示該引擎為當前默認存儲引擎.
InnoDB存儲引擎
ACID,指數(shù)據(jù)庫事務正確執(zhí)行的四個基本要素的縮寫。包含:原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Durability)。一個支持事務(Transaction)的數(shù)據(jù)庫,必須要具有這四種特性,否則在事務過程(Transaction processing)當中無法保證數(shù)據(jù)的正確性,交易過程極可能達不到交易方的要求。
InnoDB是事物型數(shù)據(jù)庫的首選引擎,支持事物安全表(ACID),支持行鎖定和外鍵。Mysql5.5.5之后,InnoDB作為默認存儲引擎,
- InnoDB 給Mysql提供了具有提交,回滾和崩潰恢復能力的事物安全(ACID兼容)存儲引擎。InnoDB鎖定在行級并且也在select語句中提供了一個類似Oracle的非鎖定讀。這些功能增加了多用戶部署和性能。在sql查詢中,可以自由的將InnoDB類型的表與其他Mysql的表的類型混合起來,甚至在同一個查詢中也可以混合。
- InnoDB是為處理巨大數(shù)據(jù)量的最大性能設計.它的CPU效率可能是任何其他基于磁盤的關系數(shù)據(jù)庫引擎所不能匹敵的。
- InnoDB存儲引擎完全與MYSQL服務器整合,InnoDB存儲引擎為在主內(nèi)存中緩存數(shù)據(jù)和索引而維持它自己的緩沖池。InnoDB將它的表和索引存在一個邏輯空間中,表空間可以包含數(shù)個文件。這與MyISAM表不同,比如在MyISAM表中每個表被存在分離的文件中。InnoDB表可以是任何尺寸,即使在文件尺寸被限制在2GB的操作系統(tǒng)上
- InnoDB支持外鍵完整性約束(FOREIGN KEY)
存儲表中的數(shù)據(jù)時,每張表的存儲都按主鍵順序存放 如果沒有顯示在表定義時指定主鍵,InnoDB會為每一行生成一個6B的ROWID 并以此作為主鍵 - InnoDB被用在眾多需要高新能的大型數(shù)據(jù)庫站點上
InnoDB 不創(chuàng)建目錄 使用InnoDB時 mysql將在mYSQL數(shù)據(jù)目錄下創(chuàng)建一個名為ibdata1的10MB大小的自動拓展數(shù)據(jù)文件,以及兩個名為ib_logfile0和ib_logfile1的5MB大小的日志文件
MyISAM存儲引擎
MyISAM基于ISAM的存儲引擎,并對其進行拓展.它是在Web,數(shù)據(jù)存儲和其他應用環(huán)境下最常使用的存儲引擎之一。MyISAM擁有較高的插入,查詢速度,但不支持事物。其主要特性有
- 大文件(達63位文件長度)在支持大文件的文件系統(tǒng)和操作系統(tǒng)上被支持
- 當吧刪除,更新及插入操作混合使用的時候,動態(tài)尺寸的行產(chǎn)生更少碎片。這要通過合并相鄰被刪除的快,以及若下一個塊被刪除 就拓展下一塊來自動完成
- 每個MyISAM表最大索引數(shù)是64 這可以通過重新編譯來改變每個索引最大的列數(shù)是16個
- BLOB和TEXT列可以被索引
- 最大的鍵長度為1000B 這也可以用個編譯來改變 對于鍵長度超過250B的情況,一個超過1024B的鍵將被用上
- NULL值被允許在索引的列中,這個值占每個鍵的0~1個字節(jié)
- 所有數(shù)字鍵值以高字節(jié)優(yōu)先被存儲以允許一個更高的所有壓縮
- 每表一個auto_increment列的內(nèi)部處理,MyISAM為insert何update操作自動更新這一列。這使得auto_increment列更快(至少10%), 在序列頂?shù)闹当粍h除之后就不能再利用。
- 可以把數(shù)據(jù)文件和索引文件放在不同目錄
- 每個字符列可以有不同的字符集
- 有varchar的表可以固定或動態(tài)記錄長度
- varchar和char列可以多達64KB
使用myisam引擎創(chuàng)建數(shù)據(jù)庫,將產(chǎn)生3個文件。文件的名字以表的名字開始,拓展名指出文件類型;frm文件存儲表定義,數(shù)據(jù)文件的拓展名為.myd(mydata),索引文件的拓展名是.myi(myindex)
MEMORY存儲引擎
Memory 存儲引擎將表中的數(shù)據(jù)存儲到內(nèi)存中,為查詢和引用其他表數(shù)據(jù)提供快速訪問。其主要特性有;
- memory表的每個表可以有多達32個索引,每個索引16列,以及500B的最大鍵長度
- 存儲引擎執(zhí)行HASH 和BTREE索引
- 可以在一個memory表中有非唯一鍵
- MEMORY不支持BLOB或TEXT列
- MEMORY表使用一個固定的記錄長度格式
- Memory支持AUTO_INCREMENT列和對包含nULL值的列的索引
- MEMORY表在所有客戶端之間共享(就像其他任何非Tempopary標)
- Memory表內(nèi)容被存在內(nèi)存中,內(nèi)存是Memory表和服務器在查詢處理時的空閑中創(chuàng)建的內(nèi)部表共享
- 當不再需要Memory表的內(nèi)容時 要釋放被Memory表使用的內(nèi)存 應該執(zhí)行DELETE FROM或TRUNCATE TABLE,或者刪除整個表(DROP TABLE)
存儲引擎的選擇
存儲引擎比較
| 功能 | MyISAM | Memory | InnoDB | Archive |
|---|---|---|---|---|
| 存儲限制 | 256TB | RAM | 64TB | None |
| 支持事物 | NO | NO | YES | NO |
| 支持全文索引 | YES | NO | NO | NO |
| 支持數(shù)索引 | YES | YES | YES | NO |
| 支持哈希索引 | NO | YES | NO | NO |
| 支持數(shù)據(jù)緩存 | NO | N/A | YES | NO |
| 支持外鍵 | NO | NO | YES | NO |