1. 程式人生 > >MYSQL——儲存引擎

MYSQL——儲存引擎

文章目錄

1.MYSQL 儲存引擎概述

資料庫儲存引擎是資料庫底層軟體組織,資料庫管理系統(DBMS)使用資料引擎進行建立、查詢、更新和刪除資料。不同的儲存引擎提供不同的儲存機制、索引技巧、鎖定水平等功能,使用不同的儲存引擎,還可以 獲得特定的功能。現在許多不同的資料庫管理系統都支援多種不同的資料引擎。MySQL的核心就是儲存引擎。
在這裡插入圖片描述
上面是MYSQL 儲存引擎的資訊。
Support: 表示MYSQL 是否支援該儲存引擎,DEFAULT 說明InnoDB是MYSQL 的預設儲存引擎
Transaction:表示該儲存引擎是否支援事物。

2. 常見的儲存引擎

2.1 InnoDB

2.1.1鎖

共享鎖(S Lock):允許事物讀一行資料,也就是讀鎖。多個事務可以同時讀取這行資料。
排他鎖(X Lock):允許事物更新或者刪除一行資料,也就是寫鎖。每次只有一個事務可以拿到該鎖。
InnoDB 支援的是行鎖,鎖的粒度較小,併發量大,可能會產生死鎖。

2.1.2 索引

InnoDB 採用B+樹來儲存索引,葉子節點儲存的是與主鍵的值相對應的行的記錄。索引值與資料儲存在一起,是聚集索引。輔助索引葉子節點儲存的是索引值和主鍵的值。
在這裡插入圖片描述

2.1.3 事務

InnoDB 支援事物的提交、回滾操作。
InnoDB 預設一條SQL語句為一個事務,在某些情況下我們需要設定多個SQL語句為一個事務,則可以通過bagin 開啟一個事務,當事務全部完成則commit 事務,若中間啊發生異常則rollback 事務,撤銷前面的操作。

2.1.4 外來鍵

InnoDB還支援外來鍵(FOREIGN KEY)。外來鍵所在的表叫做子表,外來鍵所依賴(REFERENCES)的表叫做父表。父表中被字表外來鍵關聯的欄位必須為主鍵。當刪除、更新父表中的某條資訊時,子表也必須有相應的改變,這是資料庫的參照完整性規則。

2.1.5 自增長實現

innoDB 可以設定主鍵為自增長序列,如果沒有主鍵的話,如則MySQL系統會自動選擇一個可以唯一標識資料記錄的列作為主鍵,如果不存在這種列,則MySQL自動為InnoDB表生成一個隱含欄位作為主鍵,這個欄位長度為6個位元組,型別為長整形。

2.1.6 表的檔案

InnoDB 會產生兩個表,分別為.frm和.idb。.frm 儲存的是表的定義檔案,.idb儲存的是表的資料檔案。

2.2 MyISAM

2.1.1 索引

MyISAM 的索引採用B 樹結構,非葉子節點只儲存索引值,葉子節點儲存索引值以及該索引所在行的地址,它的檔案和索引資料是分離的,是非聚集索引。
在這裡插入圖片描述

2.2.2 表的儲存檔案

MyISAM的表儲存成3個檔案。檔案的名字與表名相同。拓展名為frm、MYD、MYI。其實,frm檔案儲存表的結構;MYD檔案儲存資料,是MYData的縮寫;MYI檔案儲存索引,是MYIndex的縮寫。
支援的鎖是行鎖,鎖的力度大,併發量低,不會產生死鎖。
缺點
MyISAM 不支援事務以即併發性。
優點
佔用空間小,處理速度快

2.3 MEMORY

MEMORY是MySQL中一類特殊的儲存引擎。它使用儲存在記憶體中的內容來建立表,而且資料全部放在記憶體中。這些特性與前面的兩個很不同。

2.3.1 索引

MEMORY預設使用雜湊索引。速度比使用B型樹索引快。當然如果你想用B型樹索引,可以在建立索引時指定。

2.3.2 檔案結構

每個基於MEMORY儲存引擎的表實際對應一個磁碟檔案。該檔案的檔名與表名相同,型別為frm型別。該檔案中只儲存表的結構。而其資料檔案,都是儲存在記憶體中,這樣有利於資料的快速處理,提高整個表的效率。值得注意的是,伺服器需要有足夠的記憶體來維持MEMORY儲存引擎的表的使用。如果不需要了,可以釋放記憶體,甚至刪除不需要的表。
MEMORY 不支援排序,不適合區間查詢

注意
MEMORY用到的很少,因為它是把資料存到記憶體中,如果記憶體出現異常就會影響資料。如果重啟或者關機,所有資料都會消失。因此,基於MEMORY的表的生命週期很短,一般是一次性的。

3.使用場景

InnoDB

  • 寫多讀少,併發量大的時候。
    MyISAM
  • 讀多寫少,併發量小的時候。
  • MyISAM表索引在處理文字索引時更具優勢

4.區別

儲存引擎 索引結構 外來鍵 儲存限制 全文索引 插入資料的速度
InnoDB B+樹 YES 64TB 行鎖 NO
MyISAM B-樹 NO RAM 表鎖 YES
MEMORY 雜湊索引 NO 表鎖 256TB NO