目錄
- MySQL的存盤引擎
- 0. 存盤引擎的查看和修改
- 1. MyISAM
- 2. InnoDB
- 3. MEMORY
- 4. MERGE
- 5. 總結
- 6. 參考博客
MySQL的存盤引擎
mysql主要有四類存盤引擎,目前主要使用InnoDB作為存盤引擎,
0. 存盤引擎的查看和修改
- 查看當前資料庫的默認存盤引擎
show variables like 'default_storage_engine';
- 查看當前資料庫所支持的存盤引擎
show engine;//陳述句1 show variables like 'have_%';//陳述句2
- 查看支持事務處理的存盤引擎
select engine from information_schema.engines where transactions='yes';
- 設定新表的存盤引擎
create table 表名 (欄位名 欄位型別) engine=存盤引擎;//陳述句1 create table 表名 (欄位名 欄位型別) type=存盤引擎;//陳述句2
1. MyISAM
- 檔案組成
- .frm檔案:表結構定義,
frame
,可以理解成對整體框架的存盤 - .MYD檔案:資料檔案,存盤的是具體的資料庫資料條目
- .MYI檔案:索引檔案,存盤的是資料庫表項的索引檔案
如果用圖書管理系統做比喻的話,那么,.frm檔案
存放的是書架本身,.MYD檔案
存盤具體的書籍,.MYI檔案
存盤檢索書籍的索引目錄,
.MYI檔案
和.MYD檔案
可以存盤在不同的檔案目錄中,從而分散IO讀寫壓力,提高訪問速度,具體操作可在創建表的時候,通過DATA DIRECTORY
和INDEX DIRECTORY
屬性進行設定,
- .frm檔案:表結構定義,
- 適用范圍
由于MyISAM不支持事務,不支持外鍵,訪問速度快的特點,適用于以下特點的資料庫:
- 不要求事務完整性
- 操作主要是查找SELECT
和INSERT
- 安全性
MyISAM表中有一個標志,用于存盤上次退出表是否是正常退出,每次啟動該表之前會檢查該標志,如果上次是例外退出,則考慮進行檢查和修復,
可使用CHECK TABLE
和REPAIR TABLE
命令進行表的檢查和修改, - 支持的存盤格式
- 靜態表:每個條目長度固定
- 動態表:每個條目長度不固定
- 壓縮表:壓縮存盤,節省空間
三者的特點如下所示:
- 優缺點
- 優點:訪問速度快,
- 缺點:不支持事務,不支持外鍵,不支持行級鎖,不支持崩潰后的安全恢復,不支持并發插入(性能方面)
2. InnoDB
-
自動增長列
指的是InnoDB支持用戶手動插入的條目遵循索引項的自動增長,而不需要用戶自己設定,然而,在InnoDB中,自動增長列必須是索引項,如果是組合索引,則是其中的第一列;而對于MyISAM,則可以是任意資料項,
創建一個表之后,其自動增長列的起始值默認是1,也可以在創建表的時候進行修改:
CREATE TABLE t1 ( id INT NOT NULL AUTO_INCREMENT, name CHAR(30) NOT NULL, PRIMARY KEY (id) ) ENGINE=InnoDB AUTO_INCREMENT=某個起始數字;
在插入條目的時候,也可以通過
ALTER TABLE
命令進行修改:ALTER TABLE 具體條目 AUTO_INCREMENT=某個起始數字;
-
外鍵約束
- 在本文介紹的四個存盤引擎中,只有InnoDB支持外鍵約束,
- 外鍵約束可以指定資料表中,對父表的操作如何影響子表,具體引數如下:
restrict
:父表的洗掉和更新不會對子表產生影響cascade
:級聯操作,父表的洗掉和更新操作會影響子表,set null
:父表的洗掉和更新將會使得子表中相關條目設定為null
值no action
:效果等同于restrict
,父表的洗掉和更新操作不會對子表產生影響,
- 外鍵約束的開關
根據set forgein_key_checks=0或者1
的值,可以開啟(值為1)或者關閉(值為0)外鍵約束,
-
優缺點
- 優點:支持回滾等事務處理
- 缺點:訪問效率低,花費記憶體存盤索引結構,占用記憶體較大
3. MEMORY
- 使用記憶體內容
MEMORY表使用記憶體中的資料進行存盤管理,因此,在使用期間需要足夠的記憶體空間,當使用結束之后,需要進行記憶體釋放,命令如下DROP FROM MEMORY 表名; TRUNCATE table 表名;
- hash結構
MEMORY表的索引結構為hash,因此,有很快的訪問速度,但是也引申出對于資料庫操作指令的回應性能問題:- 相等比較:
=
,<=>
,性能較好 - 范圍比較:
>
,<
,BETWEEN
,IN
,LIKE
,性能較差 - 排序比較:
order by
,性能較差
可通過改進為B樹結構來提高性能
- 相等比較:
- 檔案組成:
使用記憶體中的資料來存盤,只需要一個.frm
檔案,用于存盤表結構定義, - 固定長度存盤
創建該表的時候,需要設定固定長度,內部的條目長度固定,可設定最大行數來確定所需要的記憶體大小,max_heap_table_size
引數用于設定最大行數,
因此,對于TEXT
、BLOB
等可變長度資料型別并不支持,但是對于VARCHAR
資料型別,在實際的資料庫操作中依然看作固定長度,因此可支持VARCHAR
資料型別, - 優缺點
根據上文的分析,可得出MEMORY表的優缺點如下:- 優點: 訪問速度快,使用hash存盤對于相等比較操作性能良好,使用記憶體中的資料而不用額外生成新檔案
- 缺點: 只支持固定長度的資料條目,對于可變長度的資料型別不支持,且使用hash索引,對于范圍、排序類的資料比較操作性能較差,需要額外釋放記憶體,
4. MERGE
- 檔案組成
- .frm: 存盤表的框架資訊
- .MRG:存盤表的定義資訊
- 具體操作
Merge存盤引擎相當于MyISAM的一個集合,需要多個表結構相同的MyISAM組合,本身并不存在資料,僅僅是一個結構,增刪改查等操作還是需要對于具體的MyISAM表進行操作, - 優缺點
- 優點: 管理多個MyISAM表,方便操作
- 缺點: 本身是多個MyISAM表的復合表,因此,MyISAM表的缺點都有,
5. 總結
對上述四種存盤引擎進行比較,得出如下表格:
6. 參考博客
- 參考博客-1
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/554831.html
標籤:MySQL
上一篇:資料庫事務隔離級別
下一篇:返回列表