您好,登錄后才能下訂單哦!
小編給大家分享一下InnoDB有什么用,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
InnoDB是一個通用的高性能、高可靠性的存儲引擎。從MySQL 5.5開始,是MySQL默認的存儲引擎
1. DML操作遵循ACID原則,事務通過commit, rollback, and crash-recovery等功能來保護用戶數據
2. 支持行級鎖,類似oracle方式一致性讀來提高多用戶并發和性能
3. InnoDB表按照主鍵的順序組織存放在磁盤上(索引組織表),優化基于主鍵的查詢
4. 支持外鍵約束
5. 可以與其他存儲引擎的表混合使用。如join查詢等
6. 當處理大量數據時,innoDB能高效利用CPU
a.支持地理空間索引 從MySQL 5.7.5開始
b.Innodb不支持hash索引,但是innodb內部使用hash索引實現自適應哈希功能
c.支持全文索引 從MySQL 5.6.4開始
d.Barracuda文件格式下支持壓縮表
e、f、g.在server層實現 數據加密、主從復制、備份和point-in-time恢復
InnoDB在內存中使用buffer pool來緩存數據和索引。
默認,innodb_file_per_table是開啟的,每個表和與其相關的索引存儲在單獨的一個文件中;
當innodb_file_per_table關閉時,所有innodb表和索引都存儲在單個系統表空間(可能包含幾個文件或者分區)。
從MySQL 5.7.6開始,innodb表可以存儲在普通表空間,多個表共享一個表空間存儲數據
Innodb表可以處理大量數據,即使在文件大小限制為2GB的OS下
MySQL 5.7 innodb是默認的存儲引擎。Innodb在mysql中是事務安全的存儲引擎,通過commit, rollback, and crash-recovery功能來保護用戶數據。Innodb 行級鎖(沒有鎖升級的問題),并且類似oracle的一致性讀來提高多用戶并發性。Innodb表是索引組織表,以主鍵的順序來組織存放數據從而減少IO。支持外鍵約束。
1. Crash recovery
2. Buffer pool緩沖訪問的數據和索引,熱點數據直接在內存中處理,此緩存使用于多種類型的信息,從而加速了處理。
3. 外鍵約束
4. 如果磁盤或者內存中的數據損壞了,在使用它之前可以使用checksum機制來修復數據
5. 索引組織表的特性,通過主鍵where ,order by,group by和join查詢是快速的
6. Change buffering特性,自動優化DML操作。Innodb表不僅允許并行的讀寫,它還緩存修改的數據來減少IO
7. 自適應哈希
8. 壓縮表和與其關聯的索引
9. 在線刪除和創建索引
10. 可以快速的Truncate一個file_per_table,并且釋放的空間,操作系統可重用。而不是file_per_table關閉狀態下,是存放在系統表空間,釋放的空間,僅僅innodb可以重用
11. 對于BLOB和long text的存儲效率更高,在動態行模式下
12. 可以通過INFORMATION_SCHEMA監控內部工作
13. 可以通過Performance 下面的表來查看性能相關信息
一些使用innodb表的建議:
1. 為每張表定義一個主鍵:使用最常查詢的列(或多列),若沒有明顯的主鍵,使用一個自增長的值作為主鍵
2. 關閉autocommit:對性能的上限最大每秒提交上百次(由存儲設備的IO性能限制)
3. 使用START TRANSACTION 和COMMIT來控制事務提交的粒度
4. 不要使用LOCK TABLES語句,innodb在不犧牲可靠性和高性能的同時能處理多個會話對同一個表的讀和寫。為了得到一些行獨占訪問,可以使用SELECT ... FOR UPDATE來鎖定期望的行
5. 開啟innodb_file_per_table選項將各個表的數據和索引存放在單獨的文件中,而不是放在一個巨大的system表空間。并且便于一些功能的使用,如:表壓縮、快速truncate等。
innodb_file_per_table 從MySQL 5.6.6開始默認是開啟的
6. 評估你的數據和訪問模式是否適用于innodb表壓縮特性(在create table語句指定(ROW_FORMAT=COMPRESSED)),表壓縮可以提高IO性能
7. 運行時指定--sql_mode=NO_ENGINE_SUBSTITUTION選項來防止需要的存儲引擎被禁用或未編譯,自動替換存儲引擎
Oracle推薦innoDB為首選,從MySQL 5.5開始,其為默認存儲引擎。
從MySQL 5.7.5開始,--skip-innodb (--innodb=OFF, --disable-innodb)選項被棄用,如果使用此選項,將會得到一個警告。在未來的MySQL版本中此選項將被刪除。
而在5.7.5之前,如果你不想使用innodb表,則通過如下步驟來關閉:
1. 啟動的時候指定--innodb=OFF 或者--skip-innodb來關閉innodb引擎
2. 因為innodb是默認引擎,所以要想關閉其,必須使用--default-storage-engine 和--default-tmp-storage-engine來設置默認的其他引擎來為永久和臨時表引擎
3. 為了防止當查詢innodb相關information_schema表時數據庫crash,需要禁用其相關表。在my.cnf位置文件中[mysqld]部分指定如下內容:
loose-innodb-trx=0
loose-innodb-locks=0
loose-innodb-lock-waits=0
loose-innodb-cmp=0
loose-innodb-cmp-per-index=0
loose-innodb-cmp-per-index-reset=0
loose-innodb-cmp-reset=0
loose-innodb-cmpmem=0
loose-innodb-cmpmem-reset=0
loose-innodb-buffer-page=0
loose-innodb-buffer-page-lru=0
loose-innodb-buffer-pool-stats=0
loose-innodb-metrics=0
loose-innodb-ft-default-stopword=0
loose-innodb-ft-inserted=0
loose-innodb-ft-deleted=0
loose-innodb-ft-being-deleted=0
loose-innodb-ft-config=0
loose-innodb-ft-index-cache=0
loose-innodb-ft-index-table=0
loose-innodb-sys-tables=0
loose-innodb-sys-tablestats=0
loose-innodb-sys-indexes=0
loose-innodb-sys-columns=0
loose-innodb-sys-fields=0
loose-innodb-sys-foreign=0
loose-innodb-sys-foreign-cols=0
以上是“InnoDB有什么用”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。