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