<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          InnoDB存儲(chǔ)引擎簡介

          共 3362字,需瀏覽 7分鐘

           ·

          2020-08-21 01:22

          前言:

          存儲(chǔ)引擎是數(shù)據(jù)庫的核心,對于 MySQL 來說,存儲(chǔ)引擎是以插件的形式運(yùn)行的。雖然 MySQL 支持種類繁多的存儲(chǔ)引擎,但最常用的當(dāng)屬 InnoDB 了,本篇文章將主要介紹 InnoDB 存儲(chǔ)引擎相關(guān)知識(shí)。

          ? 1. InnoDB 簡介

          MySQL 5.5 版本以后,默認(rèn)存儲(chǔ)引擎就是 InnoDB 了。InnoDB 是一種兼顧了高可靠性和高性能的通用存儲(chǔ)引擎。在 MySQL 5.7 中,除非你配置了其他默認(rèn)存儲(chǔ)引擎,否則執(zhí)行 CREATE TABLE 不指定 ENGINE 的語句將創(chuàng)建一個(gè) InnoDB 表。

          #?查看MySQL支持的存儲(chǔ)引擎
          mysql>?show?engines;
          +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
          |?Engine?????????????|?Support?|?Comment????????????????????????????????????????????????????????|?Transactions?|?XA???|?Savepoints?|
          +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
          |?InnoDB?????????????|?DEFAULT?|?Supports?transactions,?row-level?locking,?and?foreign?keys?????|?YES??????????|?YES??|?YES????????|
          |?MRG_MYISAM?????????|?YES?????|?Collection?of?identical?MyISAM?tables??????????????????????????|?NO???????????|?NO???|?NO?????????|
          |?MEMORY?????????????|?YES?????|?Hash?based,?stored?in?memory,?useful?for?temporary?tables??????|?NO???????????|?NO???|?NO?????????|
          |?BLACKHOLE??????????|?YES?????|?/dev/null?storage?engine?(anything?you?write?to?it?disappears)?|?NO???????????|?NO???|?NO?????????|
          |?MyISAM?????????????|?YES?????|?MyISAM?storage?engine??????????????????????????????????????????|?NO???????????|?NO???|?NO?????????|
          |?CSV????????????????|?YES?????|?CSV?storage?engine?????????????????????????????????????????????|?NO???????????|?NO???|?NO?????????|
          |?ARCHIVE????????????|?YES?????|?Archive?storage?engine?????????????????????????????????????????|?NO???????????|?NO???|?NO?????????|
          |?PERFORMANCE_SCHEMA?|?YES?????|?Performance?Schema?????????????????????????????????????????????|?NO???????????|?NO???|?NO?????????|
          |?FEDERATED??????????|?NO??????|?Federated?MySQL?storage?engine?????????????????????????????????|?NULL?????????|?NULL?|?NULL???????|
          +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+

          #?查看默認(rèn)存儲(chǔ)引擎
          mysql>?show?variables?like?'default_storage_engine';
          +------------------------+--------+
          |?Variable_name??????????|?Value??|
          +------------------------+--------+
          |?default_storage_engine?|?InnoDB?|
          +------------------------+--------+

          ? 2. InnoDB 優(yōu)勢

          InnoDB 之所以如此受寵,主要在于其功能方面的較多優(yōu)勢。


          1)支持事務(wù)

          InnoDB 最重要的一點(diǎn)就是支持事務(wù),可以說這是 InnoDB 成為 MySQL 中最流行的存儲(chǔ)引擎的一個(gè)非常重要的原因。此外 InnoDB 還實(shí)現(xiàn)了 4 種隔離級(jí)別(READ UNCOMMITTED,READ COMMITTED,REPEATABLE READ 和 SERIALIZABLE),使得對事務(wù)的支持更加靈活。

          2)災(zāi)難恢復(fù)性好

          InnoDB 通過 commit、rollback、crash-recovery 來保障數(shù)據(jù)的安全。

          具體來說,crash-recovery 就是指如果服務(wù)器因?yàn)橛布蜍浖膯栴}而崩潰,不管當(dāng)時(shí)數(shù)據(jù)是怎樣的狀態(tài),在重啟 MySQL 后,InnoDB 都會(huì)自動(dòng)恢復(fù)到發(fā)生崩潰之前的狀態(tài)。

          3)使用行級(jí)鎖

          InnoDB 改變了 MyISAM 的鎖機(jī)制,實(shí)現(xiàn)了行鎖。雖然 InnoDB 的行鎖機(jī)制是通過索引來完成的,但畢竟在數(shù)據(jù)庫中大部分的 SQL 語句都要使用索引來檢索數(shù)據(jù)。行鎖定機(jī)制也為 InnoDB 在承受高并發(fā)壓力的環(huán)境下增強(qiáng)了不小的競爭力。

          4)實(shí)現(xiàn)了緩沖處理

          InnoDB 提供了專門的緩沖池,實(shí)現(xiàn)了緩沖管理,不僅能緩沖索引也能緩沖數(shù)據(jù),常用的數(shù)據(jù)可以直接從內(nèi)存中處理,比從磁盤獲取數(shù)據(jù)處理速度要快。在專用數(shù)據(jù)庫服務(wù)器上,通常會(huì)將最多80%的物理 memory 分配給緩沖池。


          5)支持外鍵

          InnoDB 支持外鍵約束,檢查外鍵、插入、更新和刪除,以確保數(shù)據(jù)的完整性。存儲(chǔ)表中的數(shù)據(jù)時(shí),每張表的存儲(chǔ)都按主鍵順序存放,如果沒有顯式在表定義時(shí)指定主鍵,InnoDB 會(huì)為每一行生成一個(gè)6字節(jié)的 ROWID ,并以此作為主鍵。

          總結(jié):

          本篇文章簡單介紹了 InnoDB 存儲(chǔ)引擎及其優(yōu)勢,想深入學(xué)習(xí) MySQL ,InnoDB 絕對是一塊繞不開的重點(diǎn)知識(shí)。關(guān)于 InnoDB 的內(nèi)容還有很多,后面有機(jī)會(huì)的話可以多寫寫。

          參考:

          • https://dev.mysql.com/doc/refman/5.7/en/innodb-benefits.html
          • http://c.biancheng.net/view/8021.html

          推薦閱讀


          (點(diǎn)擊標(biāo)題可跳轉(zhuǎn)閱讀)

          我想和你聊聊

          MySQL主從復(fù)制詳解

          推薦一些學(xué)習(xí)MySQL的資源


          - End -

          動(dòng)動(dòng)手指轉(zhuǎn)發(fā)、在看
          是對我最大的鼓勵(lì)

          瀏覽 40
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  午夜水蜜桃 | 一级免费看片 | 欧美v日韩v亚洲 | 黄色网亚洲 | 中文字幕在线观 |