淺談——MySQL存儲引擎

博文大綱:

  • 一、MyISAM存儲引擎;
  • 二、InnoDB存儲引擎;
  • 三、Memory存儲引擎特點;
  • 四、如何選擇合適的存儲引擎?
  • 五、查看及修改表的默認引擎

前言

數據庫存儲引擎是數據庫底層軟件組件,數據庫管理系統(DBMS)使用數據引擎進行創建、查詢、更新和刪除數據操作。不同的存儲引擎提供不同的存儲機制、索引技巧、鎖定水平等功能,使用不同的存儲引擎,還可以獲得特定的功能。現在許多不同的數據庫管理系統都支持多種不同的數據引擎。MySQL的核心就是存儲引擎。

MySQL提供了多個不同的存儲引擎,包括處理事務安全表的引擎和處理非事務安全表的引擎。在MySQL中,不需要在整個服務器中使用一種引擎,針對具體要求可以對每一個表使用不同的存儲引擎。

  • 存儲引擎說白了就是數據存儲的格式,不同的存儲引擎功能不同,佔用的空間大小不同,讀取性能也不同;
  • 數據庫存儲引擎是數據庫底層軟件組件,不同的存儲引擎提供不同的存儲機制;
  • 在 MySQL 中,不需要在整個服務器中使用同一種存儲引擎,可以對每一個表使用不同的存儲引擎;
  • MySQL 支持多種存儲引擎,如 InnoDB 、MyISAM 、Memory 、Merge 、Archive 、CSV 、Federated 等等。

一、MyISAM存儲引擎

1、MyISAM存儲引擎的特點

  • MySQL 5.5 之前默認使用 MyISAM 引擎,MySQL 5.5 之後默認使用 InnoDB 引擎;
  • MyISAM 引擎讀取速度較快,佔用資源相對較少,不支持事務,不支持外鍵約束,但支持全文索引;
  • 讀寫互相阻塞,也就是說讀數據的時候你就不能寫數據,寫數據的時候你就不能讀數據;
  • MyISAM 引擎只能緩存索引,而不能緩存數據。

2、MyISAM適用場景

  • 不需要事務支持的業務,例如轉賬就不行;
  • 適用於讀數據比較多的業務,不適用於讀寫頻繁的業務;
  • 併發相對較低、數據修改相對較少的業務;
  • 硬件資源比較差的機器可以考慮使用 MyISAM 引擎。

二、InnoDB存儲引擎

1、InnoDB存儲引擎的特點

  • 事務型數據庫的首選引擎,支持事務安全表,支持行鎖定和外鍵,MySQL 5.5.5 版本之後,InnoDB 作爲默認存儲引擎;
  • 具有提交、回滾和崩潰恢復能力的事務安全存儲引擎,能處理巨大數據量,性能及效率高,完全支持外鍵完整性約束;
  • 具有非常高效的緩存特性,能緩存索引也能緩存數據,對硬件要求比較高;
  • 使用 InnoDB 時,將在 MySQL 數據目錄下創建一個名爲 ibdata1 的 10MB 大小的自動擴展數據文件,以及兩個名爲 ib_logfile0 和 ib_logfile1 的 5MB 大小的日誌文件。

2、InnoDB 適用場景

  • 需要事務支持的業務、高併發的業務
  • 數據更新較爲頻繁的場景,比如 BBS、SNS、微博等
  • 數據一致性要求較高的業務,比如充值轉賬、銀行卡轉賬

三、Memory存儲引擎特點

  • Memory 存儲引擎將表中的數據存儲到內存中,爲查詢和引用其他表數據提供快速訪問;
  • Memory 存儲引擎執行 HASH 和 BTREE 索引,不支持 BLOB 和 TEXT 列,支持 AUTO_INCREMENT 列和對可包含 NULL 值得列的索引;
  • 當不再需要 Memory 表的內容時,要釋放被 Memory 表使用的內存,應該執行 DELETE FROM 或 TRUNCATE TABLE ,或者刪除整個表。

四、如何選擇合適的存儲引擎?

不同的業務需求需要選擇不同的存儲引擎,具體可以參照以下幾點來進行選擇:

  • 如果要提供提交、回滾和崩潰恢復能力的事務安全能力,並要求實現併發控制,InnoDB 是個很好的選擇;
  • 如果數據表主要用來插入和查詢記錄,則 MyISAM 引擎能提供較高的處理效率;
  • 如果只是臨時存放數據,數據量不大,並且不需要較高的安全性,可以選擇將數據保存在內存中的 Memory 引擎,MySQL 使用該引擎作爲臨時表,存放查詢的中間結果;
  • 如果只有 INSERT 和 SELECT 操作,可以選擇 Archive 引擎,支持高併發的插入操作,如記錄日誌信息可以使用 Archive 引擎。

主要的三個數據引擎所支持的功能如下表所示:

淺談——MySQL存儲引擎

五、查看及修改表的默認引擎

mysql> show engines\G;                <!--查看數據庫支持的引擎-->
mysql> show variables like 'default_storage_engine';       <!--查看默認的存儲引擎-->
mysql> show variables like '%engine%';     <!--查看全部的默認引擎-->
mysql> show create table t01\G;     <!--查看t01表的默認引擎-->
mysql> alter table t01 engine=myisam;     <!--修改其默認引擎爲myisam-->

———————— 本文至此結束,感謝閱讀 ————————

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章