亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

簡單了解MySQL存儲引擎

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

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

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

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

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

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

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

2. MySql存儲引擎

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

2.1 InnoDB存儲引擎

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

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

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

2.2 MyISAM存儲引擎

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

2.3 Memory存儲引擎

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

雖然Memory存儲引擎速度非???,但在使用上還是有一定的限制。比如,只支持表鎖,并發(fā)性能較差,并且不支持TEXT和BLOB列類型。最重要的是,存儲變長字段(varchar)時是按照定常字段(char)的方式進行的,因此會浪費內(nèi)存。

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

2.4 Archive存儲引擎

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

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

3. 存儲引擎對比整理

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

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

-- 查看支持的存儲引擎
show engines;

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

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

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

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

4. 參考

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

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

相關(guān)文章

  • Mysql將字符串按照指定字符分割的正確方法

    Mysql將字符串按照指定字符分割的正確方法

    字符串分割是我們開發(fā)中經(jīng)常會遇到的一個需求,下面這篇文章主要給大家介紹了關(guān)于Mysql將字符串按照指定字符分割的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-05-05
  • 深入理解mysql之left join 使用詳解

    深入理解mysql之left join 使用詳解

    即使你認(rèn)為自己已對 MySQL 的 LEFT JOIN 理解深刻,但我敢打賭,這篇文章肯定能讓你學(xué)會點東西
    2012-09-09
  • Mysql5.7.11綠色版安裝教程圖文詳解

    Mysql5.7.11綠色版安裝教程圖文詳解

    本文通過圖文并茂的形式給大家展示Mysql5.7.11綠色版安裝教程,非常不錯,具有參考借鑒價值,需要的朋友參考下
    2017-01-01
  • 一文詳解MySQL中數(shù)據(jù)表的外連接

    一文詳解MySQL中數(shù)據(jù)表的外連接

    因為 MySQL 是關(guān)系型數(shù)據(jù)庫,數(shù)據(jù)是拆分重組在多個數(shù)據(jù)表里面的。所以我們勢必要從多個數(shù)據(jù)表中提取數(shù)據(jù),通過 SQL 語句的內(nèi)連接與外連接就能夠?qū)崿F(xiàn)多表查詢了,本文就來講講MySQL的外連接
    2022-08-08
  • mysql用一個表更新另一個表的方法

    mysql用一個表更新另一個表的方法

    下面小編就為大家?guī)硪黄猰ysql用一個表更新另一個表的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • Mysql自連接查詢實例詳解

    Mysql自連接查詢實例詳解

    這篇文章主要介紹了Mysql自連接查詢,結(jié)合實例形式分析了MySQL自連接查詢的應(yīng)用場景、原理及相關(guān)操作技巧,需要的朋友可以參考下
    2019-07-07
  • 淺談MySQL表空間回收的正確姿勢

    淺談MySQL表空間回收的正確姿勢

    隨著時間的推移,表里面的數(shù)據(jù)越來越多,表數(shù)據(jù)文件越來越大,數(shù)據(jù)庫占用的空間自然也逐漸增長,本文主要介紹了MySQL表空間回收,感興趣的可以了解一下
    2021-09-09
  • Mysql服務(wù)器的啟動與停止(二)

    Mysql服務(wù)器的啟動與停止(二)

    Mysql服務(wù)器的啟動與停止(二)...
    2006-11-11
  • Mysql5.7中使用group concat函數(shù)數(shù)據(jù)被截斷的問題完美解決方法

    Mysql5.7中使用group concat函數(shù)數(shù)據(jù)被截斷的問題完美解決方法

    前幾天在項目中遇到一個問題,使用 GROUP_CONCAT 函數(shù)select出來的數(shù)據(jù)被截斷了,最長長度不超過1024字節(jié),開始還以為是navicat客戶端自身對字段長度做了限制的問題。后來查找出原因,解決方法大家跟隨腳本之家小編一起看看吧
    2018-03-03
  • MySQL使用命令創(chuàng)建、刪除、查詢索引的介紹

    MySQL使用命令創(chuàng)建、刪除、查詢索引的介紹

    今天小編就為大家分享一篇關(guān)于MySQL使用命令創(chuàng)建、刪除、查詢索引的介紹,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03

最新評論