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 | 高 |