InnoDB是一個既穩定且高性能的通用存儲引擎,在MySQL5.7下默認的存儲引擎就是InnoDB。html
InnoDB的特性
InnoDB的關鍵特性以下:mysql
- DML語句知足ACID的事務模型。
- 行級鎖和Oracle-style的一致性讀,這個特性提升了用戶併發度和性能。
- InnoDB在磁盤上使用primary keys結構對你的數據進行組織。每一個使用InnoDB做爲存儲引擎的表都有一個稱爲clustered index的結構組織數據來最小化主鍵查詢時的IO次數。
InnoDB存儲引擎的一些特性:sql
Storage limits |
64TB |
Transactions |
Yes |
Locking granularity |
Row |
MVCC |
Yes |
Geospatial data type support |
Yes |
Geospatial indexing support |
Yes |
B-tree indexes |
Yes |
T-tree indexes |
No |
Hash indexes |
No |
Full-text search indexes |
Yes |
Clustered indexes |
Yes |
Data caches |
Yes |
Index caches |
Yes |
Compressed data |
Yes |
Encrypted data |
Yes |
Cluster database support |
No |
Replication support |
Yes |
Foreign key support |
Yes |
Backup / point-in-time recovery |
Yes |
Query cache support |
Yes |
Update statistics for data dictionary |
Yes |
InnoDB的好處
使用InnoDB的好處:數據庫
- crash recovery:在機器發生故障宕機後,只要是已提交的數據必定可以被恢復,不會丟失。
- buffer pool:將常常訪問的數據緩存在內存中,加快了處理速度。在專用於數據庫軟件的服務器上,80%的內存都是被分配給InnoDB的buffer pool使用。
- 支持外鍵約束:當兩個表之間存在主外鍵的約束關係時,刪除主表的數據時,對應的外鍵所在的表的數據也會相應地被刪除。
- 數據校驗:在磁盤上的數據發生損毀時,數據校驗功能能夠在訪問這片數據以前就發出警告不能使用這片數據。
- 對於主鍵字段上的order by,group by,join都會有優化,速度會很快。
- change buffering:insert,update,delete操做使用這種change buffering機制優化,使得InnoDB不僅可以對同一個表實現併發讀寫,而且可使被修改的數據實現流式IO。
- 性能優化對大表上的長時間查詢也是有效的。當有的數據行被反覆訪問時,有個稱爲Adaptive Hash Index的特性可以優化這種狀況,使訪問更快,彷彿是在一個hash table中查找同樣。
- 可以壓縮存儲表和相關的索引。
- 建索引和刪索引的操做對系統性能及穩定性影響很是低。
- 使用file-per-table存儲模式的表被清空數據時,它的存儲空間會還給文件系統,而不是交由InnoDB存儲空間來從新利用。
- 對於BLOB類型和text類型,它們在InnoDB中是做爲dynamic的行格式存儲,效率更高。
- 能夠查詢INFORMATION_SCHEMA庫中的相應表,得到存儲引擎的相關性能細節。
- 能夠在一條SQL語句中混合查詢使用不一樣存儲引擎的表,例如join兩張分別使用了MyISAM和InnoDB的數據表。
- InnoDB在處理大數據卷方面進行了優化,可以最大化CPU的效率和性能。
- InnoDB可以處理大量的數據,即便操做系統的最大文件限制只有2GB。