mysql儲存引擎 mysql儲存引擎簡介

2021-10-17 10:40:57 字數 3576 閱讀 5618

精品推薦

什麼是儲存引擎

mysql儲存引擎是資料庫如何儲存資料、怎樣建立索引以及如何查詢更新資料等技術的實現方法,資料通過使用不同的技術儲存在檔案中,使用不同的儲存機制、索引方式來提供不同的功能。在mysql這種關係型資料中心來說,資料是以表的方式來儲存的,因此,簡單點來說,儲存引擎就是儲存和操作此表的型別。

mysql中有多種儲存引擎,使用命令:show engines 可以檢視當前版本支援的儲存引擎。

從結果來看,我們可以看到只有innodb是支援事務的,並且是mysql 的預設儲存引擎。下面分別介紹幾種常見的儲存引擎。

儲存引擎的種類

innodb

innodb是mysql5.5版本及以上的預設儲存引擎,也是最重要,使用最廣泛的儲存引擎,它主要有以下幾種特點:

獨享表空間儲存方式使用.ibd檔案,並且每個表乙個ibd檔案;共享表空間儲存方式使用.ibdata檔案,所有表共同使用乙個ibdata檔案;

innodb使用b+tree的方式儲存索引,innodb的乙個表可能包含多個索引,每個索引都使用b+樹來儲存。而索引包括聚集索引和非聚集索引(二級索引),聚集索引使用表的主鍵作為索引鍵,包含表的所有字段。非聚集索引只包含索引鍵和聚集索引鍵(主鍵)的內容,不包括其他字段。每乙個索引都是一棵b+樹,每棵b+樹由很多頁面組成,而每個頁面大小一般為16k。

我們通過下圖看下表聚集索引和非聚集索引的差別:

聚集索引將索引和資料行儲存在同乙個b-tree中,查詢通過聚集索引可以直接獲取資料

非聚集索引的葉子節點中儲存的不是指向行的物理指標,而是行的主鍵值。當通過聚集索引查詢行,儲存引擎需要在聚集索引中找到相應的葉子節點,獲得行的主鍵值,然後使用主鍵去聚簇索引中查詢資料行,這需要兩次b-tree查詢。

myisam

myisam提供了大量的特性,包括全文索引、壓縮、空間函式等,主要有以下特點:

每個myisam在磁碟上儲存成三個檔案:

.frm檔案:與表相關的元資料資訊都存放在frm檔案,包括表結構的定義資訊等。

.myd檔案:用於儲存myisam表的資料

.myi檔案:,用於儲存myisam表的索引相關資訊

myisam索引檔案.myi (myindex)和資料檔案.myd (mydata)是分離的,索引檔案僅儲存記錄所在頁的指標(物理位置),通過這些位址來讀取頁,進而讀取被索引的行。

主鍵索引跟非主鍵索引的結構是一樣:

樹中葉子儲存的是對應行的物理位置。通過該值,儲存引擎能順利地進行回表查詢,得到一行完整記錄。同時,每個葉子頁也儲存了指向下乙個葉子頁的指標。從而方便葉子節點的範圍遍歷。

csv引擎

csv儲存引擎可以將csv檔案作為mysql的表進行處理。儲存格式就是普通的csv檔案,資料以文字方式儲存在檔案中,所有的列必須都是不能為null的,不支援索引,可以直接對檔案進行編輯。

在mysql中新建一張表,以csv為儲存引擎,插入一條資料:

mysql> insert into csvtest (id,name) values (1,"mike");

使用命令檢視檔案儲存位置:

mysql> show global variables like "%datadir%";

+---------------+-----------------+

| variable_name | value |

+---------------+-----------------+

| datadir | /var/lib/mysql/ |

+---------------+-----------------+

1 row in set (0.01 sec)

開啟儲存檔案,檢視csv檔案

[root@localhost shoes]# cat csvtest.csv

1,"mike"

csv檔案可以直接修改,我們向表中插入幾條記錄

[root@localhost shoes]# vi csvtest.csv

1,"mike"

2,"jack"

3,"daniel"

重新整理表,然後檢視資料

mysql> flush tables;

query ok, 0 rows affected (0.51 sec)

mysql> select * from csvtest;

+----+--------+

| id | name |

+----+--------+

| 1 | mike |

| 2 | jack |

| 3 | daniel |

+----+--------+

3 rows in set (0.00 sec)

根據csv的特性,可以在資料庫執行時複製或者到匯出檔案,可以將excel等電子**中的資料儲存為csv檔案,然後複製到mysql的目錄下面,就能在mysql中開啟使用。外部程式也可以從表的資料檔案中讀取csv格式的資料,因此csv引擎可以作為資料交換的一種機制。

memory

memory儲存引擎使用存在於記憶體中的內容來建立表,memory表至少比myisam表要快乙個數量級,因為所有的資料都儲存在記憶體中,不需要進行磁碟i/o,meomory表的結構在重啟後還會保留,但是資料會丟失。memory表支援hash索引,是表級鎖,因此併發寫入的時候效能較低,並且不支援blob和text型別的列,每行長度固定,即使指定了varchar型別,但是實際儲存的時候仍然會轉換成char。

memory適用於下幾種場景:

innodb和myisam的比較

innodb支援事務,myisam不支援事務

innodb支援行鎖,表鎖,myisam只支援表鎖,因此myisam不會發生死鎖,但是innodb會。

接上面一點,由於鎖級別的問題,myisam併發效率比innodb低

innodb支援外來鍵,而myisam不支援

索引結構有區別,innodb有聚簇索引和非聚簇索引,聚簇索引的葉子節點儲存了資料,myisam是非聚簇索 引,索引和資料檔案是分離的,索引儲存的是資料檔案的指標。

innodb儲存檔案有frm、ibd,而myisam是frm、myd、myi。

還有乙個區別是查詢總數,innodb不儲存表的具體行數,select count(*)的時候需要全表掃瞄,而 myisam用乙個變數儲存了整個表的行數,執行上述語句時只需要讀出該變數即可,速度很快

mysql BDB儲存引擎 mysql中的儲存引擎

mysql中常用的幾種儲存引擎 innodb bdb myisam memory以及這幾個引擎的講解 innodb儲存引擎 1 innodb儲存引擎該mysql表提供了事務,回滾以及系統崩潰修復能力和多版本迸發控制的事務的安全。2 innodb支援自增長列 auto increment 自增長列的值...

mysql個儲存引擎 MySQL儲存引擎

mysql資料庫的體系架構如下圖所示 從上圖中可以看出,mysql主要分為以下幾個元件 連線池元件 管理服務和工具元件 sql介面元件 分析器元件 優化器元件 緩衝元件 外掛程式式儲存引擎 物理檔案 儲存引擎 其實就是指定表如何儲存資料,如何為儲存的資料建立索引以及如何更新 查詢資料等技術實現的方法...

mysql儲存引擎模式 mysql儲存引擎

mysql資料庫的體系架構如下圖所示 從上圖中可以看出,mysql主要分為以下幾個元件 連線池元件 管理服務和工具元件 sql介面元件 分析器元件 優化器元件 緩衝元件 外掛程式式儲存引擎 物理檔案 一 儲存引擎 儲存引擎 其實就是指定 表 如何儲存資料,如何為儲存的資料 建立索引以及 如何更新,查...