11 MySQL存儲引擎

11 MySQL存儲引擎

11.1 MySQL體系結構

  • 體系結構的概念

    • 任何一套系統當中,每個部件都能起到一定的作用!
  • MySQL的體系結構

MySQL-11-01.png
  • 體系結構詳解
    • 客戶端連接
      • 支持接口:支持的客戶端連接,例如C、Java、PHP等語言來連接MySQL數據庫
    • 第一層:網絡連接層
      • 連接池:管理、緩沖用戶的連接,線程處理等需要緩存的需求。
      • 例如:當客戶端發送一個請求連接,會從連接池中獲取一個連接進行使用。
    • 第二層:核心服務層
      • 管理服務和工具:系統的管理和控制工具,例如備份恢復、復制、集群等。
      • SQL接口:接受SQL命令,并且返回查詢結果。
      • 查詢解析器:驗證和解析SQL命令,例如過濾條件、語法結構等。
      • 查詢優化器:在執行查詢之前,使用默認的一套優化機制進行優化sql語句
      • 緩存:如果緩存當中有想查詢的數據,則直接將緩存中的數據返回。沒有的話再重新查詢!
    • 第三層:存儲引擎層
      • 插件式存儲引擎:管理和操作數據的一種機制,包括(存儲數據、如何更新、查詢數據等)
    • 第四層:系統文件層
      • 文件系統:配置文件、數據文件、日志文件、錯誤文件、二進制文件等等的保存

11.2 MySQL存儲引擎

  • 引擎的概念

    • 生活中,引擎就是整個機器運行的核心,不同的引擎具備不同的功能。
  • MySQL存儲引擎的概念

    • MySQL數據庫使用不同的機制存取表文件 , 機制的差別在于不同的存儲方式、索引技巧、鎖定水平以及廣泛的不同的功能和能力,在MySQL中 , 將這些不同的技術及配套的功能稱為存儲引擎
    • 在關系型數據庫中數據的存儲是以表的形式存進行儲的,所以存儲引擎也可以稱為表類型(即存儲和操作此表的類型)。
    • Oracle , SqlServer等數據庫只有一種存儲引擎 , 而MySQL針對不同的需求, 配置MySQL的不同的存儲引擎 , 就會讓數據庫采取了不同的處理數據的方式和擴展功能。
    • 通過選擇不同的引擎 ,能夠獲取最佳的方案 , 也能夠獲得額外的速度或者功能,提高程序的整體效果。所以了解引擎的特性 , 才能貼合我們的需求 , 更好的發揮數據庫的性能。
  • MySQL支持的存儲引擎

    • MySQL5.7支持的引擎包括:InnoDB、MyISAM、MEMORY、Archive、Federate、CSV、BLACKHOLE等
    • 其中較為常用的有三種:InnoDB、MyISAM、MEMORY

11.3 常用引擎的特性對比

  • 常用的存儲引擎
    • MyISAM存儲引擎
      • 訪問快,不支持事務和外鍵。表結構保存在.frm文件中,表數據保存在.MYD文件中,索引保存在.MYI文件中。
    • InnoDB存儲引擎(MySQL5.5版本后默認的存儲引擎)
      • 支持事務 ,占用磁盤空間大 ,支持并發控制。表結構保存在.frm文件中,如果是共享表空間,數據和索引保存在 innodb_data_home_dir 和 innodb_data_file_path定義的表空間中,可以是多個文件。如果是多表空間存儲,每個表的數據和索引單獨保存在 .ibd 中。
    • MEMORY存儲引擎
      • 內存存儲 , 速度快 ,不安全 ,適合小量快速訪問的數據。表結構保存在.frm中。
  • 特性對比
特性 MyISAM InnoDB MEMORY
存儲限制 有(平臺對文件系統大小的限制) 64TB 有(平臺的內存限制)
事務安全 不支持 支持 不支持
鎖機制 表鎖 表鎖/行鎖 表鎖
B+Tree索引 支持 支持 支持
哈希索引 不支持 不支持 支持
全文索引 支持 支持 不支持
集群索引 不支持 支持 不支持
數據索引 不支持 支持 支持
數據緩存 不支持 支持 N/A
索引緩存 支持 支持 N/A
數據可壓縮 支持 不支持 不支持
空間使用 N/A
內存使用 中等
批量插入速度
外鍵 不支持 支持 不支持

11.4 引擎的操作

  • 查詢數據庫支持的引擎
-- 標準語法
SHOW ENGINES;

-- 查詢數據庫支持的存儲引擎
SHOW ENGINES;
-- 表含義:
  - support : 指服務器是否支持該存儲引擎
  - transactions : 指存儲引擎是否支持事務
  - XA : 指存儲引擎是否支持分布式事務處理
  - Savepoints : 指存儲引擎是否支持保存點
  • 查詢某個數據庫中所有數據表的引擎
-- 標準語法
SHOW TABLE STATUS FROM 數據庫名稱;

-- 查看db9數據庫所有表的存儲引擎
SHOW TABLE STATUS FROM db9;
  • 查詢某個數據庫中某個數據表的引擎
-- 標準語法
SHOW TABLE STATUS FROM 數據庫名稱 WHERE NAME = '數據表名稱';

-- 查看db9數據庫中stu_score表的存儲引擎
SHOW TABLE STATUS FROM db9 WHERE NAME = 'stu_score';
  • 創建數據表,指定存儲引擎
-- 標準語法
CREATE TABLE 表名(
    列名,數據類型,
    ...
)ENGINE = 引擎名稱;

-- 創建db11數據庫
CREATE DATABASE db11;

-- 使用db11數據庫
USE db11;

-- 創建engine_test表,指定存儲引擎為MyISAM
CREATE TABLE engine_test(
    id INT PRIMARY KEY AUTO_INCREMENT,
    NAME VARCHAR(10)
)ENGINE = MYISAM;

-- 查詢engine_test表的引擎
SHOW TABLE STATUS FROM db11 WHERE NAME = 'engine_test';
  • 修改表的存儲引擎
-- 標準語法
ALTER TABLE 表名 ENGINE = 引擎名稱;

-- 修改engine_test表的引擎為InnoDB
ALTER TABLE engine_test ENGINE = INNODB;

-- 查詢engine_test表的引擎
SHOW TABLE STATUS FROM db11 WHERE NAME = 'engine_test';

11.5 總結:引擎的選擇

  • MyISAM :由于MyISAM不支持事務、不支持外鍵、支持全文檢索和表級鎖定,讀寫相互阻塞,讀取速度快,節約資源,所以如果應用是以查詢操作插入操作為主,只有很少的更新和刪除操作,并且對事務的完整性、并發性要求不是很高,那么選擇這個存儲引擎是非常合適的。
  • InnoDB : 是MySQL的默認存儲引擎, 由于InnoDB支持事務、支持外鍵、行級鎖定 ,支持所有輔助索引(5.5.5后不支持全文檢索),高緩存,所以用于對事務的完整性有比較高的要求,在并發條件下要求數據的一致性,讀寫頻繁的操作,那么InnoDB存儲引擎是比較合適的選擇,比如BBS、計費系統、充值轉賬等
  • MEMORY:將所有數據保存在RAM中,在需要快速定位記錄和其他類似數據環境下,可以提供更快的訪問。MEMORY的缺陷就是對表的大小有限制,太大的表無法緩存在內存中,其次是要確保表的數據可以恢復,數據庫異常終止后表中的數據是可以恢復的。MEMORY表通常用于更新不太頻繁的小表,用以快速得到訪問結果。
  • 總結:針對不同的需求場景,來選擇最適合的存儲引擎即可!如果不確定、則使用數據庫默認的存儲引擎!
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,333評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,491評論 3 416
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,263評論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,946評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,708評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,186評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,255評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,409評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,939評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,774評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,976評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,518評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,209評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,641評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,872評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,650評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,958評論 2 373

推薦閱讀更多精彩內容