共計(jì) 3180 個(gè)字符,預(yù)計(jì)需要花費(fèi) 8 分鐘才能閱讀完成。
丸趣 TV 小編給大家分享一下 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)
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 下
Innodb 作為默認(rèn)存儲(chǔ)引擎
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ù)從而減少 IO。支持外鍵約束。
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 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 表最佳實(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)?innodb 是默認(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)注丸趣 TV 行業(yè)資訊頻道!