什麼是數據庫引擎?
數據庫存儲引擎是數據庫底層軟件組件,數據庫管理系統(DBMS)使⽤數據引擎進⾏創建、查詢、更新和刪除數據操作。
不同的存儲引擎提供不同的存儲機制、索引技巧、鎖定⽔平等功能,使⽤不同的存儲引擎,還可以獲得特定的功能。
現在許多不同的數據庫管理系統都⽀持多種不同的數據引擎。
MySQL的核⼼就是存儲引擎
。
數據庫引擎簡述
MySQL提供了多個不同的存儲引擎,包括處理事務安全表的引擎和處理⾮事務安全表的引擎。在MySQL中,不需要在整個服務器中使⽤⼀種引擎,針對具體要求可以
對每⼀個表使⽤不同的存儲引擎。MySQL5.5⽀持的存儲引擎有:InnoDB、
MyISAM、Memory等。查看引擎的命令⽤
SHOW ENGINES\G
mysql> SHOW ENGINES\G
*************************** 1. row ***************************
Engine: InnoDB
Support: DEFAULT
Comment: Supports transactions, row-level locking, and foreign keys
Transactions: YES
XA: YES
Savepoints: YES
*************************** 2. row ***************************
Engine: CSV
Support: YES
Comment: CSV storage engine
Transactions: NO
XA: NO
Savepoints: NO
*************************** 3. row ***************************
Engine: MyISAM
Support: YES
Comment: MyISAM storage engine
Transactions: NO
XA: NO
Savepoints: NO
*************************** 4. row ***************************
Engine: BLACKHOLE
Support: YES
Comment: /dev/null storage engine (anything you write to it disappears)
Transactions: NO
XA: NO
Savepoints: NO
*************************** 5. row ***************************
Engine: PERFORMANCE_SCHEMA
Support: YES
Comment: Performance Schema
Transactions: NO
XA: NO
Savepoints: NO
*************************** 6. row ***************************
Engine: MRG_MYISAM
Support: YES
Comment: Collection of identical MyISAM tables
Transactions: NO
XA: NO
Savepoints: NO
*************************** 7. row ***************************
Engine: ARCHIVE
Support: YES
Comment: Archive storage engine
Transactions: NO
XA: NO
Savepoints: NO
*************************** 8. row ***************************
Engine: MEMORY
Support: YES
Comment: Hash based, stored in memory, useful for temporary tables
Transactions: NO
XA: NO
Savepoints: NO
*************************** 9. row ***************************
Engine: FEDERATED
Support: NO
Comment: Federated MySQL storage engine
Transactions: NULL
XA: NULL
Savepoints: NULL
9 rows in set (0.00 sec)
mysql>
查看默認存儲引擎:
mysql> SHOW variables like 'default_storage_engine';
+------------------------+--------+
| Variable_name | Value |
+------------------------+--------+
| default_storage_engine | InnoDB |
+------------------------+--------+
1 row in set (0.00 sec)
數據庫引擎特性
- 存儲引擎說⽩了就是數據存儲的格式,不同的存儲引擎功能不同,佔⽤的空間⼤⼩不同,讀取性能也不同
- 數據庫存儲引擎是數據庫底層軟件組件,不同的存儲引擎提供不同的存儲機制
- 在 MySQL 中,不需要在整個服務器中使⽤同⼀種存儲引擎,可以對每⼀個表使⽤不同的存儲引擎
- MySQL ⽀持多種存儲引擎,如 InnoDB 、MyISAM 、Memory 、Merge 、Archive 、CSV 、Federated 等等
InnoDB 存儲引擎與MyISAM 存儲引擎對比
MyISAM 存儲引擎特點:
- MySQL 5.5 之前使⽤
MyISAM 引擎
,MySQL 5.5 之後使⽤InnoDB 引擎
- MyISAM 引擎讀取速度較快,佔⽤資源相對較少,不⽀持事務,不⽀持外鍵約束,但⽀持全⽂索引
- 讀寫互相阻塞,也就是說讀數據的時候你就不能寫數據,寫數據的時候你就不能讀數據
- MyISAM 引擎只能緩存索引,⽽不能緩存數據
MyISAM 適⽤場景:
- 不需要事務⽀持的業務,例如轉賬就不⾏
- 適⽤於讀數據⽐較多的業務,不適⽤於讀寫頻繁的業務
- 併發相對較低、數據修改相對較少的業務
- 硬件資源⽐較差的機器可以考慮使⽤ MyISAM 引擎
InnoDB 存儲引擎特點
- 事務型數據庫的⾸選引擎,⽀持事務安全表,⽀持⾏鎖定和外鍵
- 具有提交、回滾和崩潰恢復能⼒的事務安全存儲引擎,能處理巨⼤數據量,性能及效率⾼,完全⽀持外鍵完整性約束
- 具有⾮常⾼效的緩存特性,能緩存索引也能緩存數據,對硬件要求⽐較⾼
- 使⽤ InnoDB 時,將在 MySQL 數據⽬錄下創建⼀個名爲 ibdata1 的 10MB ⼤⼩的⾃動擴展數據⽂件,以及兩個名爲 ib_logfile0 和 ib_logfile1 的 5MB ⼤⼩的⽇志⽂件
InnoDB 適⽤場景:
- 需要事務⽀持的業務、⾼併發的業務
- 數據更新較爲頻繁的場景,⽐如 BBS、SNS、微博等
- 數據⼀致性要求較⾼的業務,⽐如充值轉賬、銀⾏卡轉賬
Memory 存儲引擎特點:
- Memory 存儲引擎將表中的數據存儲到內存中,爲查詢和引⽤其他表數據提供快速訪問
- Memory 存儲引擎執⾏ HASH 和 BTREE 索引,不⽀持 BLOB 和 TEXT 列,⽀持 AUTO_INCREMENT 列和對可包含 NULL 值得列的索引
- 當不再需要 Memory 表的內容時,要釋放被 Memory 表使⽤的內存,應該執⾏DELETE FROM 或 TRUNCATE TABLE ,或者刪除整個表
存儲引擎的選擇
- 如果要提供提交、回滾和崩潰恢復能⼒的事務安全能⼒,並要求實現併發控制 InnoDB 是個很好的選擇
- 如果數據表主要⽤來插⼊和查詢記錄,則 MyISAM 引擎能提供較⾼的處理效率
- 如果只是臨時存放數據,數據量不⼤,並且不需要較⾼的安全性,可以選擇將數據保存在內存中的 Memory 引擎,MySQL 使⽤該引擎作爲臨時表,存放查詢的中間結果
- 如果只有 INSERT 和 SELECT 操作,可以選擇 Archive 引擎,⽀持⾼併發的插⼊操作,如記錄⽇志信息可以使⽤ Archive 引擎
這三種引擎區別如下圖:
補充:
在mysql存儲方面,每個數據庫最多可創建20億個表,⼀個表允許定義1024列,每⾏的最⼤⻓度爲8092字節(不包括⽂本和圖像類型的⻓度),所以,理論上⽆限⼤ 就看你硬⽚夠不夠⼤ ⼤多數情況先是你的硬⽚不夠。