溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

InnoDB有什么用

發(fā)布時(shí)間:2021-11-08 09:18:30 來(lái)源:億速云 閱讀:373 作者:小新 欄目:MySQL數(shù)據(jù)庫(kù)

小編給大家分享一下InnoDB有什么用,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

InnoDB是一個(gè)通用的高性能、高可靠性的存儲(chǔ)引擎。從MySQL 5.5開(kāi)始,是MySQL默認(rèn)的存儲(chǔ)引擎

InnoDB表關(guān)鍵特性

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

 

InnoDB引擎特點(diǎn)

InnoDB有什么用

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ù),即使在文件大小限制為2GBOS

 

Innodb作為默認(rèn)存儲(chǔ)引擎

MySQL 5.7 innodb是默認(rèn)的存儲(chǔ)引擎。Innodbmysql中是事務(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。支持外鍵約束。

 

Innodb表的好處

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 byjoin查詢是快速的

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ì)于BLOBlong text的存儲(chǔ)效率更高,在動(dòng)態(tài)行模式下

12.   可以通過(guò)INFORMATION_SCHEMA監(jiān)控內(nèi)部工作

13.    可以通過(guò)Performance 下面的表來(lái)查看性能相關(guān)信息

 

Innodb表最佳實(shí)踐

一些使用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ǔ)引擎

關(guān)閉InnoDB引擎

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è)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI