MYSQL底層分析MyISAM查詢效能更高的原因

2021-10-08 09:31:30 字數 1900 閱讀 4167

mysql最常見的引擎是myisam引擎和innodb引擎,那這兩種引擎有什麼區別呢?

myisam查詢效能高,但不支援事務,而innodb最大的特點就是支援事務,並且支援行鎖。mysql在建立表的時候就可以指定引擎。那mysql引擎為什麼查詢效能更高呢。

比如下面的例子。

//建立表test1

create

table

`test1`

(`id`

int(11)

unsigned

notnull

auto_increment

,`name`

varchar(50

)default

null

,primary

key(

`id`))

engine

=innodb

default

charset

=utf8;

//建立表2

create

table

`test2`

(`id`

int(11)

unsigned

notnull

auto_increment

,`name`

varchar(50

)default

null

,primary

key(

`id`))

engine

=myisam default

charset

=utf8;

執行以上兩段命令後,對應的資料庫資料夾下面會出現如下檔案

共有的檔案:

db.opt

記錄當前資料庫的預設字符集及字元序等資訊

myisam引擎 建立表後生成的檔案有:

test2.frm:建立表的語句;

test2.myd:表資料儲存的檔案;

test2.myi:表索引儲存的檔案;

innodb引擎 建立表後生成的檔案有:

test1.frm:建立表的語句;

那麼innodb引擎表的資料和索引放**呢?

在mysql,data資料夾下有乙個ibdata1檔案,這個是innodb的共享空間檔案,儲存innodb表的資料和索引。

從檔案來看,這兩個引擎底層資料和索引的組織方式是不一樣的,myisam 引擎把資料和索引分開了而innodb 引擎把資料和索引放在同乙個檔案裡了。

分析

myisam資料和索引落在不同的兩個檔案上,在建表時以主鍵作為 key 來建立主索引 b+樹,樹的葉子節點存的是對應資料的實體地址。我們拿到這個實體地址後,就可以到 myisam 資料檔案中直接定位到具體的資料記錄了。

當我們為某個字段新增索引的時候,同樣會生成對應的字段索引,該字段的索引樹的葉子節點儲存的也是實體地址,當我們下次查詢的時候,我們可以直接根據實體地址去找到對應的資料。

innodb資料和索引檔案是在同乙個檔案中,innodb表在建表的時候會自動的建立主鍵索引,索引的葉子節點儲存的是對應主鍵的資料。

當我們為某個字段新增索引的時候,該索引的葉子節點儲存的是對應主鍵的key,然後在根據主鍵的key去搜尋對應的資料。

總結:myisam根據實體地址直接找到資料;innodb需要先找到key值,在找到後在根據key值去搜尋對應的資料,需要執行兩步,而myisam一步就可以搜尋到對應的資料。所以myisam的查詢效能更高哦。

MySQL之MYISAM和INODB 分析

資料庫中的儲存引擎其實是對使用了該引擎的表進行某種設定,資料庫中的表設定了什麼儲存引擎,那麼該錶在資料儲存方式 資料更新方式 資料查詢效能以及是否支援索引等方面就會有不同的 效果 在mysql資料庫中存在著多種引擎 不同版本的mysql資料庫支援的引擎不同 一般來說,mysql有以下幾種引擎 isa...

Mysql索引底層原理分析

mysql索引底層原理分析,mysql索引的本質 mysql索引的底層原理 mysql索引的實戰經驗 面試問 資料庫中最常見的慢查詢優化方式是什麼?同學a 加索引。問 為什麼加索引能優化慢查詢?同學a 不知道同學b 因為索引其實就是一種優化查詢的資料結構,比如mysql中的索引是用b 樹實現的,而b...

mysql 索引底層原理分析

一 區分幾個概念 1 頁 1 頁號 記錄當前是第幾頁。2 頁目錄 記錄行資料,標記行開始的最小主鍵索引資料。3 行資料 標識每一行的資料。1 111a 標識第一行資料,1 表示主鍵索引。行與行資料使用鍊錶有序相連。2 b 樹 多個頁相互連線在一起,為了方便查詢會再向上生成乙個新的類似頁的東西,記錄頁...