1. InnoDB介紹
InnoDB是一個高可靠,高性能的多用途數據庫存儲引擎。在MySQL5.7中InnoDB是默認使用的存儲引擎,當然,你可以配置其它存儲引擎,比如沒有通過ENGINE設置爲InnoDB的建表語句。
InnoDB的關鍵特性
列舉以下重要幾點:
DML操作在ACID模式下執行(插入,更新,刪除操作,要注意的是查詢操作有時候也可能認爲是DML操作,如select * from table for update),也就是關於事務的提交,回滾,故障恢復。
行級鎖和類似Oracle的非鎖定讀以及多用戶的支持。
聚集索引,InnoDB會根據表的主鍵在數據存儲的時候對數據進行排序以減少通過主鍵查詢時的I/O。每一個InnoDB表的主鍵就是一個聚集索引
在保證數據完整性方面,InnoDB支持外鍵,有外鍵存在時,數據在插入,更新和刪除的時候都有外鍵約束。
InnoDB特性
Storage limits 存儲限制 | 64TB | Transactions 事務 | Yes | Locking granularity 鎖粒度 | Row |
MVCC 多版本併發控制 | Yes | Geospatial data type support 地理座標數據類型支持 | Yes | Geospatial indexing support 座標索引支持 | Yes[a] |
B-tree indexes B-tree 索引 | Yes | T-tree indexes T-tree 索引 | No | Hash indexes 哈希索引 | No[b] |
Full-text search indexes 全文索引 | Yes[c] | Clustered indexes 聚集索引 | Yes | Data caches 緩存 | Yes |
Index caches 索引緩存 | Yes | Compressed data 壓縮功能 | Yes[d] | Encrypted data[e] 加密功能 | Yes |
Cluster database support 集羣支持 | No | Replication support[f] 複製支持 | Yes | Foreign key support 外鍵支持 | Yes |
Backup / point-in-time recovery[g] 時間點恢復 | Yes | Query cache support 查詢緩存支持 | Yes | Update statistics for data dictionary 更新靜態字典數據 | Yes |
一些特性說明: [a] 在MySQL5.7.5以及更高的版本中InnoDB 支持地理位置。 [b] InnoDB 在自適應哈希索引內部使用哈希索引。 [c] 在MySQL 5.6.4 以及更高的版本中InnoDB 支持全文索。 [d] 表壓縮功能需要Barracuda 的文件格式 [e] 通過加密函數實現。 [f] 支持,但不是在引擎級別實現。 [g] 支持,但不是在引擎級別實現。. |
各種存儲引擎的對比將在後面的章節中詳細列出。
1.1 爲什麼要選擇InnoDB
選擇InnoDB的理由如下:
如果你的服務器由於硬件或軟件的問題而崩潰,你不用考慮數據庫當時發生的事情,也不需要你在數據庫重新啓動後做任何特殊處理。InnoDB的故障恢復機制會自動幫你完成所有在故障發生前的提交,另外,對沒有提交的動作不做任何操作。
InnoDB存儲引擎對於訪問的數據在內存中持有一個緩存表數據和索引的緩存池,用戶的一些查詢可以從內存中的緩存池中直接返回數據。這種緩存方式適用於很多提高處理速度的場景。在一臺專用的數據庫服務器上,InnoDB緩存池的內存佔用通常都高於總內存的80%。