目錄
- 查看所有存儲引擎
- InnoDB 存儲引擎
- MyISAM 存儲引擎
- MEMORY 存儲引擎
查看所有存儲引擎
我們可以通過 show engines
命令來看到我們的 mysql server 提供了哪些引擎:
show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| 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 rows in set (0.00 sec)
InnoDB 存儲引擎
InnoDB 是事務性數據庫的首選引擎,支持事務安全表(ACID),支持行鎖定和外鍵。MySQL5.5.5 之后,InnoDB 作為默認存儲引擎。InnoDB 主要特性有:
- InnoDB 給 MySQL 提供了具有提交、回滾和崩潰恢復能力的事務安全(ACID 兼容)存儲引擎。InnoDB 鎖定在行級并且也在 SELECT 語句中提供一個類似 Oracle 的非鎖定讀。這些功能增加了多用戶部署和性能。在 SQL 查詢中,可以自由地將 InnoDB 類型的表與其他 MySQL 的表的類型混合起來,甚至在同一個查詢中也可以混合。
- InnoDB 是為處理巨大數據量所設計的性能為重的,它的 CPU 效率可能是任何其他基于磁盤的關系數據庫引擎所不能匹敵的。
- InnoDB 存儲引擎完全與 MySQL 服務器整合,InnoDB 存儲引擎在主內存中維持了自己的緩沖池來緩存數據和索引。InnoDB 將它的表和索引存在一個邏輯表空間中,表空間可以包含數個文件(或原始磁盤分區)。這與 MyISAM 表不同,比如在 MyISAM 表中每個表被存在分離的文件中。InnoDB 表可以是任何尺寸,即使在文件尺寸被限制在 2GB 的操作系統上。
- InnoDB 支持外鍵完整性約束(FOREIGN KEY)。存儲表中的數據時,每張表的存儲都按主鍵順序存放,如果沒有顯式在表定義時制定主鍵,InnoDB 會為每一行生成一個 6B 的 ROWID,并以此作為主鍵。
- InnoDB 被用在眾多需要高性能的大型數據庫站點上。
- InnoDB 不創建目錄,使用 InnoDB 時,MySQL 將在 MySQL 數據目錄下創建一個名為 ibdata1 的 10MB 大小的自動擴展數據文件,以及兩個名為 ib_logfile0 和 ib_logfile1 的 5MB 大小的日志文件。
MyISAM 存儲引擎
MyISAM 是基于 ISAM 的存儲引擎,并對其進行擴展。它是在 Web、數據存儲和其他應用環境下最常使用的存儲引擎之一。MyISAM 擁有較高的插入、查詢速度,但不支持事務。在 MySQL5.5.5 之前的版本中,MyISAM 是默認存儲引擎。MyISAM 主要特性有:
- 大文件(達 63 位文件長度)在支持大文件的文件系統和操作系統上被支持。
- 當把刪除、更新及插入操作混合使用的時候,動態尺寸的行產生更少碎片。這要通過合并相鄰被刪除的塊,以及若下一個塊被刪除,就擴展到下一塊來自動完成。
- 每個 MyISAM 表最大索引數是 64,這可以通過重新編譯來改變。每個索引最大的列數是 16 個。
- 最大的鍵長度是 1000B,這也可以通過編譯來改變。對于鍵長度超過 250B 的情況,一個超過 1024B 的鍵將被用上。
- BLOB 和 TEXT 列可以被索引。
- NULL 值被允許在索引的列中。這個值占每個鍵的 0-1 個字節。
- 所有數字鍵值以高字節優先被存儲以允許一個更高的索引壓縮。
- 每表一個 AUTO_INCREMENT 列的內部處理。MyISAM 為 INSERT 和 UPDATE 操作自動更新這一列。這使得 AUTO_INCREMENT 列更快(至少 10%)。在序列項的值被刪除之后就不能再利用。
- 可以把數據文件和索引文件放在不同目錄。
- 每個字符列可以有不同的字符集。
- 有 VARCHAR 的表可以固定或動態記錄長度。
- VARCHAR 和 CHAR 列可以多達 64KB。
- 使用 MyISAM 引擎創建數據庫,將產生 3 個文件。文件的名字以表的名字開始,擴展名代表了文件的類型:frm 文件存儲表定義,myd 代表數據文件,myi 代表索引文件。
MEMORY 存儲引擎
MEMORY 存儲引擎將表中的數據存儲到內存中,為查詢和引用其他表數據提供快速訪問。MEMORY 主要特性有:
- MEMORY 表的每個表可以有多達 32 個索引,每個索引 16 列,以及 500B 的最大鍵長度。
- MEMORY 存儲引擎執行 HASH 和 BTREE 索引。
- 可以在一個 MEMORY 表中有非唯一鍵。
- MEMORY 表使用一個固定的記錄長度格式。
- MEMORY 不支持 BLOG 或 TEXT 列。
- MEMORY 支持 AUTO_INCREMENT 列和對可包含 NULL 值的列的索引。
- MEMORY 表在所有客戶端之間共享(就像其他任何非 TEMPORARY 表)。
- MEMORY 表內容被存在內存中,內存是 MEMORY 表和服務器在查詢處理時的空閑中創建的內部表共享的。
- 當不再需要 MEMORY 表的內容時,要釋放被 MEMORY 表使用的內存,應該執行 DELETE FROM 或 TRUNCATE TABLE,或者刪除整個表(用 DROP TABLE)。
以上就是MySQL 常見存儲引擎的優劣的詳細內容,更多關于MySQL 存儲引擎的優劣的資料請關注腳本之家其它相關文章!
您可能感興趣的文章:- SQL Server中的執行引擎入門 圖解
- 修改MySQL數據庫引擎為InnoDB的操作
- 關于MySQL Memory存儲引擎的相關知識
- 詳解mysql中的存儲引擎
- MySQL 選擇合適的存儲引擎
- 聊聊MySQL中的存儲引擎
- MySQL創建數據表時設定引擎MyISAM/InnoDB操作
- 簡述MySQL InnoDB存儲引擎
- 如何自己動手寫SQL執行引擎