mysql學習筆記(二)——數據庫引擎

什麼是數據庫引擎?

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

數據庫引擎簡述

MySQL提供了多個不同的存儲引擎,包括處理事務安全表的引擎和處理⾮事務安全表的引擎。在MySQL中,不需要在整個服務器中使⽤⼀種引擎,針對具體要求可以
對每⼀個表使⽤不同的存儲引擎。MySQL5.5⽀持的存儲引擎有:InnoDB、
MyISAM、Memory等。查看引擎的命令⽤
SHOW ENGINES\G

mysql> SHOW ENGINES\G
*************************** 1. row ***************************
      Engine: InnoDB
     Support: DEFAULT
     Comment: Supports transactions, row-level locking, and foreign keys
Transactions: YES
          XA: YES
  Savepoints: YES
*************************** 2. row ***************************
      Engine: CSV
     Support: YES
     Comment: CSV storage engine
Transactions: NO
          XA: NO
  Savepoints: NO
*************************** 3. row ***************************
      Engine: MyISAM
     Support: YES
     Comment: MyISAM storage engine
Transactions: NO
          XA: NO
  Savepoints: NO
*************************** 4. row ***************************
      Engine: BLACKHOLE
     Support: YES
     Comment: /dev/null storage engine (anything you write to it disappears)
Transactions: NO
          XA: NO
  Savepoints: NO
*************************** 5. row ***************************
      Engine: PERFORMANCE_SCHEMA
     Support: YES
     Comment: Performance Schema
Transactions: NO
          XA: NO
  Savepoints: NO
*************************** 6. row ***************************
      Engine: MRG_MYISAM
     Support: YES
     Comment: Collection of identical MyISAM tables
Transactions: NO
          XA: NO
  Savepoints: NO
*************************** 7. row ***************************
      Engine: ARCHIVE
     Support: YES
     Comment: Archive storage engine
Transactions: NO
          XA: NO
  Savepoints: NO
*************************** 8. row ***************************
      Engine: MEMORY
     Support: YES
     Comment: Hash based, stored in memory, useful for temporary tables
Transactions: NO
          XA: NO
  Savepoints: NO
*************************** 9. row ***************************
      Engine: FEDERATED
     Support: NO
     Comment: Federated MySQL storage engine
Transactions: NULL
          XA: NULL
  Savepoints: NULL
9 rows in set (0.00 sec)

mysql> 

查看默認存儲引擎:

mysql> SHOW variables like 'default_storage_engine';
+------------------------+--------+
| Variable_name          | Value  |
+------------------------+--------+
| default_storage_engine | InnoDB |
+------------------------+--------+
1 row in set (0.00 sec)

數據庫引擎特性

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

InnoDB 存儲引擎與MyISAM 存儲引擎對比

MyISAM 存儲引擎特點:

  1. MySQL 5.5 之前使⽤ MyISAM 引擎,MySQL 5.5 之後使⽤InnoDB 引擎
  2. MyISAM 引擎讀取速度較快,佔⽤資源相對較少,不⽀持事務,不⽀持外鍵約束,但⽀持全⽂索引
  3. 讀寫互相阻塞,也就是說讀數據的時候你就不能寫數據,寫數據的時候你就不能讀數據
  4. MyISAM 引擎只能緩存索引,⽽不能緩存數據

MyISAM 適⽤場景:

  1. 不需要事務⽀持的業務,例如轉賬就不⾏
  2. 適⽤於讀數據⽐較多的業務,不適⽤於讀寫頻繁的業務
  3. 併發相對較低、數據修改相對較少的業務
  4. 硬件資源⽐較差的機器可以考慮使⽤ MyISAM 引擎

InnoDB 存儲引擎特點

  1. 事務型數據庫的⾸選引擎,⽀持事務安全表,⽀持⾏鎖定和外鍵
  2. 具有提交、回滾和崩潰恢復能⼒的事務安全存儲引擎,能處理巨⼤數據量,性能及效率⾼,完全⽀持外鍵完整性約束
  3. 具有⾮常⾼效的緩存特性,能緩存索引也能緩存數據,對硬件要求⽐較⾼
  4. 使⽤ InnoDB 時,將在 MySQL 數據⽬錄下創建⼀個名爲 ibdata1 的 10MB ⼤⼩的⾃動擴展數據⽂件,以及兩個名爲 ib_logfile0 和 ib_logfile1 的 5MB ⼤⼩的⽇志⽂件

InnoDB 適⽤場景:

  1. 需要事務⽀持的業務、⾼併發的業務
  2. 數據更新較爲頻繁的場景,⽐如 BBS、SNS、微博等
  3. 數據⼀致性要求較⾼的業務,⽐如充值轉賬、銀⾏卡轉賬

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存儲方面,每個數據庫最多可創建20億個表,⼀個表允許定義1024列,每⾏的最⼤⻓度爲8092字節(不包括⽂本和圖像類型的⻓度),所以,理論上⽆限⼤ 就看你硬⽚夠不夠⼤ ⼤多數情況先是你的硬⽚不夠。

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