最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

簡(jiǎn)單了解MySQL存儲(chǔ)引擎

 更新時(shí)間:2020年07月14日 14:37:26   作者:程序員自由之路  
這篇文章主要介紹了MySQL存儲(chǔ)引擎的相關(guān)資料,為開(kāi)發(fā)時(shí)選擇合適的存儲(chǔ)引擎提供參考,感興趣的朋友可以了解下

1. MySql體系結(jié)構(gòu)

在介紹存儲(chǔ)引擎之前先來(lái)介紹下MySql的體系結(jié)構(gòu),以便大家知道存儲(chǔ)引擎在MySql整個(gè)體系中處于什么位置。下圖是官方提供的一張架構(gòu)圖:

MySQL體系結(jié)構(gòu)圖

從上圖可以發(fā)現(xiàn),MySQL由以下幾部分組成:

  • 連接池組件
  • 管理服務(wù)和工具組件
  • SQL接口組件
  • 查詢分析器組件
  • 優(yōu)化器組件
  • 緩沖(Cache)組件
  • 插件式存儲(chǔ)引擎
  • 物理文件

MySQL數(shù)據(jù)庫(kù)區(qū)別于其他數(shù)據(jù)庫(kù)的最重要的一個(gè)特點(diǎn)就是其插件式的表存儲(chǔ)引擎,從上圖中也可以看到,MySql支持很多種存儲(chǔ)引擎。需要特別注意的是,存儲(chǔ)引擎是基于表的,而不是數(shù)據(jù)庫(kù)。

2. MySql存儲(chǔ)引擎

插件式存儲(chǔ)引擎的好處是:能夠根據(jù)具體的應(yīng)用的特點(diǎn)選擇不同的存儲(chǔ)引擎。下面是幾種MySQL常用的存儲(chǔ)引擎。

2.1 InnoDB存儲(chǔ)引擎

InnoDB存儲(chǔ)引擎支持事務(wù),其設(shè)計(jì)目標(biāo)主要面向在線事務(wù)處理(OLTP)的應(yīng)用。其特點(diǎn)是行鎖設(shè)計(jì)、支持外鍵,并支持類似于Oracle的非鎖定讀,即默認(rèn)讀取操作不會(huì)產(chǎn)生鎖。從MySQL數(shù)據(jù)庫(kù)5.5.8版本開(kāi)始,InnoDB存儲(chǔ)引擎是默認(rèn)的存儲(chǔ)引擎。

InnoDB通過(guò)使用多版本并發(fā)控制(MVCC)來(lái)獲得高并發(fā)性,并且實(shí)現(xiàn)了SQL標(biāo)準(zhǔn)的4種隔離級(jí)別,默認(rèn)為REPEATABLE級(jí)別。同時(shí),使用一種被稱為next-key locking的策略來(lái)避免幻讀(phantom)現(xiàn)象的產(chǎn)生。除此之外,InnoDB儲(chǔ)存引擎還提供了插入緩沖(insert buffer)、二次寫(xiě)(double write)、自適應(yīng)哈希索引(adaptive hash index)、預(yù)讀(read ahead)等高性能和高可用的功能。

對(duì)于表中數(shù)據(jù)的存儲(chǔ),InnoDB存儲(chǔ)引擎采用了聚集(clustered)的方式,因此每張表的存儲(chǔ)都是按主鍵的順序進(jìn)行存放。如果沒(méi)有顯式地在表定義時(shí)指定主鍵,InnoDB存儲(chǔ)引擎會(huì)為每一行生成一個(gè)6字節(jié)的ROWID,并以此作為主鍵。

2.2 MyISAM存儲(chǔ)引擎

MyISAM存儲(chǔ)引擎不支持事務(wù)、表鎖設(shè)計(jì),支持全文索引,主要面向一些OLAP數(shù)據(jù)庫(kù)應(yīng)用。此外,MyISAM存儲(chǔ)引擎的另一個(gè)與眾不同的地方是它的緩沖池只緩存(cache)索引文件,而不緩沖數(shù)據(jù)文件,這點(diǎn)和大多數(shù)的數(shù)據(jù)庫(kù)都非常不同。從MySQL 5.0版本開(kāi)始,MyISAM默認(rèn)支持256TB的單表數(shù)據(jù),這足夠滿足一般應(yīng)用需求。

2.3 Memory存儲(chǔ)引擎

Memory存儲(chǔ)引擎(之前稱HEAP存儲(chǔ)引擎)將表中的數(shù)據(jù)存放在內(nèi)存中,如果數(shù)據(jù)庫(kù)重啟或發(fā)生崩潰,表中的數(shù)據(jù)都將消失。它非常適合用于存儲(chǔ)臨時(shí)數(shù)據(jù)的臨時(shí)表,以及數(shù)據(jù)倉(cāng)庫(kù)中的緯度表。Memory存儲(chǔ)引擎默認(rèn)使用哈希索引,而不是我們熟悉的B+樹(shù)索引。

雖然Memory存儲(chǔ)引擎速度非??欤谑褂蒙线€是有一定的限制。比如,只支持表鎖,并發(fā)性能較差,并且不支持TEXT和BLOB列類型。最重要的是,存儲(chǔ)變長(zhǎng)字段(varchar)時(shí)是按照定常字段(char)的方式進(jìn)行的,因此會(huì)浪費(fèi)內(nèi)存。

此外有一點(diǎn)容易被忽視,MySQL數(shù)據(jù)庫(kù)使用Memory存儲(chǔ)引擎作為臨時(shí)表來(lái)存放查詢的中間結(jié)果集(intermediate result)。如果中間結(jié)果集大于Memory存儲(chǔ)引擎表的容量設(shè)置,又或者中間結(jié)果含有TEXT或BLOB列類型字段,則MySQL數(shù)據(jù)庫(kù)會(huì)把其轉(zhuǎn)換到MyISAM存儲(chǔ)引擎表而存放到磁盤(pán)中。之前提到MyISAM不緩存數(shù)據(jù)文件,因此這時(shí)產(chǎn)生的臨時(shí)表的性能對(duì)于查詢會(huì)有損失。

2.4 Archive存儲(chǔ)引擎

Archive存儲(chǔ)引擎只支持INSERT和SELECT操作,從MySQL 5.1開(kāi)始支持索引。Archive存儲(chǔ)引擎使用zlib算法將數(shù)據(jù)行(row)進(jìn)行壓縮后存儲(chǔ),壓縮比一般可達(dá)1∶10。正如其名字所示,Archive存儲(chǔ)引擎非常適合存儲(chǔ)歸檔數(shù)據(jù),如日志信息。Archive存儲(chǔ)引擎使用行鎖來(lái)實(shí)現(xiàn)高并發(fā)的插入操作,但是其本身并不是事務(wù)安全的存儲(chǔ)引擎,其設(shè)計(jì)目標(biāo)主要是提供高速的插入和壓縮功能。

當(dāng)然MySql還支持很多其他的存儲(chǔ)引擎,這邊不一一列舉了。

3. 存儲(chǔ)引擎對(duì)比整理

存儲(chǔ)引擎可以理解為表的存儲(chǔ)結(jié)構(gòu),每種存儲(chǔ)引擎都支持不同的特性。MySQL支持插件式的存儲(chǔ)引擎,可以為每張數(shù)據(jù)表指定不同的存儲(chǔ)引擎。常用的存儲(chǔ)引擎的特點(diǎn)整體如下:

我們也可以使用下面命令查看當(dāng)前數(shù)據(jù)庫(kù)支持哪些存儲(chǔ)引擎:

-- 查看支持的存儲(chǔ)引擎
show engines;

下面對(duì)最常用的三種存儲(chǔ)引擎做下簡(jiǎn)單總結(jié)介紹:

  • InnoDB:MySQL默認(rèn)的存儲(chǔ)引擎,支持事務(wù)、支持行級(jí)鎖和表級(jí)鎖、支持各類索引、支持外鍵,高版本的MySQL還支持全文索引,但是批量數(shù)據(jù)插入的效率較低;
  • MyISAM:具有較高的數(shù)據(jù)插入效率和數(shù)據(jù)查詢速度,支持全文索引,但是不支持?jǐn)?shù)據(jù)庫(kù)事務(wù),不支持行級(jí)鎖,只支持表級(jí)鎖;
  • MEMORY:使用這個(gè)存儲(chǔ)引擎時(shí),會(huì)將表中的數(shù)據(jù)加載到內(nèi)存中,查詢很快,但是對(duì)內(nèi)存要求較高。

所以我們應(yīng)該根據(jù)應(yīng)用的具體需求選擇合適的存儲(chǔ)引擎,而不是不加思考的都選擇默認(rèn)存儲(chǔ)引擎(INNODB)。

如果要提供提交、回滾和恢復(fù)的事務(wù)安全(ACID兼容)能力,并要求實(shí)現(xiàn)并發(fā)控制,InnoDB是一個(gè)很好的選擇。如果數(shù)據(jù)表主要用來(lái)插入和查詢記錄,則MyISAM引擎提供較高的處理效率。如果只是臨時(shí)存放數(shù)據(jù),數(shù)據(jù)量不大,并且不需要較高的數(shù)據(jù)安全性,可以選擇將數(shù)據(jù)保存在內(nèi)存的MEMORY引擎中,MySQL中使用該引擎作為臨時(shí)表,存放查詢的中間結(jié)果。如果只有INSERT和SELECT操作,可以選擇Archive引擎,Archive存儲(chǔ)引擎支持高并發(fā)的插入操作,但是本身并不是事務(wù)安全的。Archive存儲(chǔ)引擎非常適合存儲(chǔ)歸檔數(shù)據(jù),如記錄日志信息可以使用Archive引擎。

4. 參考

《MySQL技術(shù)內(nèi)幕》

以上就是簡(jiǎn)單了解MySQL存儲(chǔ)引擎的詳細(xì)內(nèi)容,更多關(guān)于MySQL存儲(chǔ)引擎的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • MySQL權(quán)限變更何時(shí)生效

    MySQL權(quán)限變更何時(shí)生效

    本文為大家講述了對(duì)三種級(jí)別權(quán)限的變更后,使其生效的方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪<BR>
    2023-10-10
  • MySQL查詢語(yǔ)句簡(jiǎn)單操作示例

    MySQL查詢語(yǔ)句簡(jiǎn)單操作示例

    這篇文章主要介紹了MySQL查詢語(yǔ)句簡(jiǎn)單操作,結(jié)合實(shí)例形式分析了MySQL數(shù)據(jù)庫(kù)、數(shù)據(jù)表創(chuàng)建、數(shù)據(jù)插入、數(shù)據(jù)查詢等相關(guān)操作技巧,需要的朋友可以參考下
    2019-11-11
  • mysql中find_in_set()函數(shù)用法及自定義增強(qiáng)函數(shù)

    mysql中find_in_set()函數(shù)用法及自定義增強(qiáng)函數(shù)

    MySQL 中的 FIND_IN_SET 函數(shù)用于在逗號(hào)分隔的字符串列表中查找指定字符串的位置,本文就來(lái)介紹一下mysql中find_in_set()函數(shù)用法及自定義增強(qiáng)函數(shù)
    2024-08-08
  • windows安裝MySQL到D盤(pán)的超詳細(xì)步驟

    windows安裝MySQL到D盤(pán)的超詳細(xì)步驟

    MySQL數(shù)據(jù)庫(kù)作為關(guān)系型數(shù)據(jù)庫(kù)中的佼佼者,因其體積小,速度快,成本低,不僅受到了市場(chǎng)的極大追捧,也受到了廣大程序員的青睞,下面這篇文章主要給大家介紹了關(guān)于windows安裝MySQL到D盤(pán)的超詳細(xì)步驟,需要的朋友可以參考下
    2023-03-03
  • MySQL中的游標(biāo)和綁定變量

    MySQL中的游標(biāo)和綁定變量

    這篇文章主要介紹了MySQL中的游標(biāo)和綁定變量方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • mysql授權(quán)、啟動(dòng)、啟動(dòng)服務(wù)常用命令

    mysql授權(quán)、啟動(dòng)、啟動(dòng)服務(wù)常用命令

    本篇文章給大家分享了mysql授權(quán)、啟動(dòng)、啟動(dòng)服務(wù)常用命令總結(jié),希望我們整理的內(nèi)容對(duì)大家有用。
    2018-03-03
  • mysql技巧之select count的區(qū)別分析

    mysql技巧之select count的區(qū)別分析

    在工作過(guò)程中,時(shí)不時(shí)會(huì)有開(kāi)發(fā)咨詢幾種select count()的區(qū)別,我總會(huì)告訴他們使用select count(*) 就好。下文我會(huì)展示幾種sql的執(zhí)行計(jì)劃來(lái)說(shuō)明為啥是這樣。
    2013-08-08
  • MySQL 之壓力測(cè)試工具的使用方法

    MySQL 之壓力測(cè)試工具的使用方法

    這篇文章主要介紹了MySQL 之壓力測(cè)試工具的使用方法,mysqlslap是mysql自帶的基準(zhǔn)測(cè)試工具,該工具查詢數(shù)據(jù),語(yǔ)法簡(jiǎn)單,靈活容易使用,感興趣的可以了解一下
    2020-05-05
  • 阿里面試MySQL死鎖問(wèn)題的處理

    阿里面試MySQL死鎖問(wèn)題的處理

    這篇文章主要介紹了在阿里面試中的一個(gè)問(wèn)題MySQL死鎖問(wèn)題的處理回答,對(duì)常見(jiàn)的死鎖案例進(jìn)行相關(guān)分析與探討,以及如何去盡可能避免死鎖給出一些建議
    2022-03-03
  • 解決Mysql5.7.17在windows下安裝啟動(dòng)時(shí)提示不成功問(wèn)題

    解決Mysql5.7.17在windows下安裝啟動(dòng)時(shí)提示不成功問(wèn)題

    這篇文章主要介紹了解決Mysql5.7.17在windows下安裝啟動(dòng)時(shí)提示不成功問(wèn)題,需要的朋友可以參考下
    2017-03-03

最新評(píng)論

湟源县| 宁化县| 红安县| 昔阳县| 九江县| 南城县| 牟定县| 图片| 嘉定区| 田阳县| 呈贡县| 皋兰县| 黎城县| 巴林左旗| 淅川县| 邻水| 巴东县| 来凤县| 赤壁市| 孟津县| 来安县| 沁水县| 格尔木市| 潞城市| 隆子县| 双柏县| 湖南省| 白玉县| 合川市| 连江县| 左权县| 潞西市| 渑池县| 绍兴县| 达尔| 葵青区| 临沧市| 宁阳县| 舟山市| 紫云| 改则县|