Mysql InnoDB引擎的索引與儲存結構詳解

2022-10-04 06:15:09 字數 2450 閱讀 6365

前言

在oracle 和sql server等資料庫中只有一種儲存引擎,所有資料儲存管理機制都是一樣的。

而mysql資料庫提供了多種儲存引擎。使用者可以根據不同的需求為資料表選擇不同的儲存引擎,使用者也可以根據自己的需要編寫自己的儲存引擎。

mysql主要儲存引擎的區別

mysql預設的儲存引擎是myisam,其他常用的就是innodb,另外還有merge、memory(heap)等。

主要的幾個儲存引擎

myisam管理非事務表,提供高速儲存和檢索,以及全文搜尋能力。

myisam是mysql的預設儲存引擎。當create建立新錶時,未指定新錶的儲存引擎時,預設使用myisam。每個myisam在磁碟上儲存成三個檔案。檔名都和表名相同,副檔名分別是.frm(儲存表定義)、.myd (mydata,儲存資料)、.myi (myindex,儲存索引)djrrghhhc。資料檔案和索引檔案可以放置在不同的目錄,平均分布io,獲得更快的速度。

innodb儲存引擎用於事務處理應用程式,具有眾多特性,包括acid事務支援,提供了具有提交、回滾和崩潰恢復能力的事務安全。但是對比myisam儲存引擎,innodb寫的程式設計客棧處理效率差一些並且會占用更多的磁碟空間以保留資料和索引。

memory將所有資料儲存在記憶體中,可以應用於臨時表中在需要快速查詢引用和其他類似資料的環境下,可提供極快的訪問。memory使用雜湊索引,所以資料的訪問速度非常快。

merge允許mysql dba或開發人員將一系列等同的myisam表以邏輯方式組合在一起,並作為1個物件引用它們。對於諸如資料倉儲等vldb環境十分適合。

不同儲存引擎的橫向對比

特點myisam

bdbmemory

innodb

儲存限制

沒有沒有

有64tb

事務安全

支援支援

鎖機制表鎖

頁鎖表鎖

行鎖b樹索引

支援支援

支援支援

雜湊索引

支援支援

全文索引

支援集群索引

支援資料快取

支援支援

索引快取

支援支援

支援資料可壓縮

支援空間使用低低

n/a高

記憶體使用低低

中等高

批量插入的速度高高

高低

支援外來鍵

支援檢視和配置儲存引擎的操作

1.用show engines; 命令可以顯示當前資料庫支援的儲存引擎情況;

2.要檢視表的定義結構等資訊可以使用以下幾種命令:

desc[ribe] tablename; //檢視資料表的結構

show create table tablename; //顯示表的建立語句,可以檢視建立表時指定的engine

show table status like 『tablename'\g顯示表的當前狀態值

3.設定或修改表的儲存引擎

建立資料庫表時設定儲存儲存引擎的基本語法是:

create table tablename(

columnname(列名1) type(資料型別) attri(屬性設定),

columnname(列名2) type(資料型別) attri(屬性設定),

……..) engine = enginename

修改儲存引擎,可以用命令程式設計客棧

alter table tablename engine =enginename

對於整個伺服器或方案,你並不一定要使用相同的儲存引擎,可以為方案中的每個表使用不同的儲存引擎。

innodb的儲存結構

innodb使用頁面儲存結構,下面是innodb的表空間結構圖:

page頁面儲存格式如下圖所示:

乙個頁面的儲存由以下幾部分組成:

頁面中的頁頭,最大/最小虛記錄以及頁尾都是頁面中有固定的儲存位置。

innodb的索引結構

innodb使用b+tree的方式儲存索引。

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

葉子節點:b樹層次為0的頁面,儲存記錄的所有內容。

非葉子節點:b樹層次大於0的頁面,只儲存索引鍵和頁面指標。

一棵典型的b+樹結構:

從上圖可知,相同層次的頁面是用乙個雙向鍊錶連線起來的。

一般情況下,從b+樹的最左邊葉子節點開始,一直向右掃瞄,就可以得到b+樹的從小到大的所有資料。因此,對於葉子節點,有如下特徵:

頁內資料是按索引鍵排序的。

頁面的任一記錄的索引鍵值不小於其左兄弟頁面的任何記錄。

總結本文標題: mysql innodb引擎的索引與儲存結構詳解

本文位址:

mysql InnoDB儲存引擎

innodb的組成部分 1.後台執行緒 2.儲存引擎記憶體池 innodb儲存引擎記憶體緩衝池 1.記憶體緩衝池 innodb是基於磁碟儲存的,並將其中的記錄按照頁的方式進行管理。因此,可將其視為基礎磁碟的資料庫系統。在資料庫系統中,由於cpu速度與磁碟速度之間的紅狗,基於磁碟的資料庫系統通常使用緩...

Mysql Innodb儲存引擎

鎖 參考資料 參考資料 行鎖 innodb的鎖是對索引加鎖,如果查詢到並沒有用到索引就會對錶進行加鎖 record lock 對單條記錄加上鎖 gap lock 間隙鎖,鎖定乙個範圍,但是不包含記錄本身 next key lock record lock gap lock,鎖定乙個方位並鎖定記錄本身...

MYSQL INNODB 儲存引擎

innodb 是事務安全的mysql儲存引擎,設計上採用了類似於oracle的架構。一般而言,在oltp的應用中,innodb應該作為核心應用表的首選儲存引擎。同時,也是因為innodb的存在,才使得mysql變得更有魅力。第一 innodb儲存引擎概述 innodb由innobase oy 公司開...