- MySQL入門很輕松(微課超值版)
- 云尚科技
- 2383字
- 2020-09-18 11:30:45
3.5 數據庫存儲引擎

MySQL中的存儲引擎是指表的類型,數據庫的存儲引擎決定了表在計算機中的存儲方式。不同的存儲引擎提供不同的存儲機制、索引技巧、鎖定水平等功能,使用不同的存儲引擎,還可以獲得特定的功能,MySQL的核心就是存儲引擎。
3.5.1 MySQL存儲引擎簡介
存儲引擎的概念是MySQL的特點,而且是一種插入式的存儲引擎概念。這決定了MySQL數據庫中的表可以用不同的方式存儲。用戶可以根據自己的需求,選擇不同的存儲方式、是否進行駛入處理等。
【實例12】使用SHOW ENGINES語句查看系統所支持的引擎類型,輸入如下語句:

結果中主要參數介紹如下。
- Engine參數:指存儲引擎的名稱。
- Support參數:說明MySQL是否支持該類引擎。
- Comment參數:指對該引擎的評論。
- Transactions參數:表示是否支持事務處理,YES表示可以使用,NO表示不能使用。
- XA參數:表示是否分布式交易處理的XA規范,YES表示支持。
- Savepoints參數:表示是否支持保存點,以便事務回滾到保存點,YES表示支持。
由查詢結果可以得出,MySQl支持的存儲引擎有InnoDB、MRG_MYISAM、MEMORY、PERFORMANCE_ SCHEMA、ARCHIVE、FEDERATED、CSV、BLACKHOLE、MyISAM,其中InnoDB為默認存儲引擎,該引擎的Support參數值為DEFAULT。
MySQL中另一個SHOW語句也可以顯示支持的存儲引擎的信息。
【實例13】使用SHOW語句查詢MySQL支持的存儲引擎,輸入如下語句:
mysql> SHOW VARIABLES LIKE 'have%';
按Enter鍵,即可返回查詢結果,如圖3-16所示。從查詢結果中可以得出,第一列Variable_name表示存儲引擎的名稱,第二列Value表示MySQL的支持情況。YES表示支持,NO表示不支持;DISABLED表示支持但還沒有開啟。
提示:創建數據表時,如果沒有指定存儲引擎,表的存儲引擎將為默認的存儲引擎。本書中MySQL的默認存儲引擎為InnoDB。

圖3-16 存儲引擎查詢結果
3.5.2 InnoDB存儲引擎
InnoDB是MySQL數據庫的一種存儲引擎,InnoDB給MySQL數據表提供了事務、回歸、崩潰修復能力和多版本并發控制的事務安全,支持行鎖定和外鍵等。MySQL的默認存儲引擎為InnoDB。InnoDB的主要特性如下:
(1)InnoDB給MySQL提供了具有提交,回滾和崩潰恢復能力的事務安全(ACID兼容)存儲引擎。InnoDB鎖定在行級并且也在SELECT語句提供一個類似Oracle的非鎖定讀。這些功能增加了多用戶部署和性能。在SQL查詢中,可以自由地將InnoDB類型的表與其他MySQL的表的類型混合起來,甚至在同一個查詢中也可以混合。
(2)InnoDB是為處理巨大數據量時的最大性能設計。它的CPU效率可能是任何其他基于磁盤的關系數據庫引擎所不能匹敵的。
(3)InnoDB支持外鍵完整性約束(FOREIGN KEY)。存儲表中的數據時,每張表的存儲都按主鍵順序存放,如果沒有顯式的在表定義時指定主鍵,InnoDB會為每一行生成一個6字節的ROWID,并以此作為主鍵。
(4)InnoDB被用在眾多需要高性能的大型數據庫站點上。InnoDB不創建目錄,使用InnoDB時,MySQL將在MySQL數據目錄下創建一個名為ibdata1的10MB大小的自動擴展數據文件,以及兩個名為ib_logfile0和ib_logfile1的5MB大小的日志文件。
3.5.3 MyISAM存儲引擎
MyISAM存儲引擎是MySQL中常見的存儲引擎,曾是MySQL的默認存儲引擎,MyISAM存儲引擎是基于ISAM存儲引擎發展起來的,而且增加了很多有用的擴展,如擁有較高的插入、查詢速度等,但是它不支持事務,主要特性如下:
(1)大文件(達63位文件長度)在支持大文件的文件系統和操作系統上被支持。
(2)當把刪除和更新及插入混合的時候,動態尺寸的行更少碎片。這要通過合并相鄰被刪除的塊,以及若下一個塊被刪除,就擴展到下一塊來自動完成。
(3)每個MyISAM表的最大索引數是64。這可以通過重新編譯來改變。每個索引最大的列數是16。
(4)最大的鍵長度是1000字節。這也可以通過編譯來改變。對于鍵長度超過250字節的情況,使用一個超過1024字節的鍵塊。
(5)BLOB和TEXT列可以被索引。
(6)NULL值被允許在索引的列中。
(7)所有數字鍵值以高字節位先被存儲以允許一個更高的索引壓縮。
(8)每表一個AUTO_INCREMENT列的內部處理。MyISAM為INSERT和UPDATE操作自動更新這一列。這使得AUTO_INCREMENT列更快(至少10%)。在序列頂的值被刪除之后就不能再利用。
(9)可以把數據文件和索引文件放在不同目錄。
(10)每個字符列可以有不同的字符集。
(11)有VARCHAR的表可以有固定或動態記錄長度。
(12)VARCHAR和CHAR列可以多達64KB。
使用MyISAM引擎創建數據庫,將產生3個文件。文件的名字以表的名字開始,擴展名指出文件類型:frm文件存儲表定義,數據文件的擴展名為.MYD (MYData),索引文件的擴展名是.MYI (MYIndex)。
3.5.4 MEMORY存儲引擎
MEMORY存儲引擎是MySQL中的一類特殊的存儲引擎,其使用存儲在內存中的內容來創建,而且所有數據也放在內存中,這些特性都與InnoDB存儲引擎、MyISAM存儲引擎不同。MEMORY的主要特性如下:
(1)MEMORY表可以有多達每個表32個索引,每個索引16列,以及500字節的最大鍵長度。
(2)MEMORY存儲引擎執行HASH和BTREE索引。
(3)可以在一個MEMORY表中有非唯一鍵。
(4)MEMORY表使用一個固定的記錄長度格式。
(5)MEMORY不支持BLOB或TEXT列。
(6)MEMORY支持AUTO_INCREMENT列和對可包含NULL值的列的索引。
(7)MEMORY表在所有客戶端之間共享(就像其他任何非TEMPORARY表)。
(8)MEMORY表內容被存在內存中,內存是MEMORY表和服務器在查詢處理之時的空閑中創建的內部表共享。
(9)當不再需要MEMORY表的內容之時,要釋放被MEMORY表使用的內存,應該執行DELETE FROM或TRUNCATE TABLE,或者整個地刪除表(使用DROP TABLE)。
3.5.5 存儲引擎的選擇
不同存儲引擎都有各自的特點,適用于不同的需求,為了做出選擇,首先需要考慮每一個存儲引擎提供了哪些不同的功能。表3-1是常用存儲引擎的功能比較。
InnoDB存儲引擎:如果要提供提交、回滾和崩潰恢復能力的事務安全(ACID兼容)能力,并要求實現并發控制,InnoDB存儲引擎是很好的選擇。
MyISAM存儲引擎:如果數據表主要用來插入和查詢記錄,則MyISAM引擎能提供較高的處理效率,因此MyISAM存儲引擎是首選。
MEMORY存儲引擎:如果只是臨時存放數據,數據量不大,并且不需要較高的數據安全性,可以選擇將數據保存在內存中的MEMORY引擎,MySQL中使用MEMORY存儲引擎作為臨時表存放查詢的中間結果。
ARCHIVE存儲引擎:如果只有INSERT和SELECT操作,可以選擇ARCHIVE引擎,ARCHIVE存儲引擎支持高并發的插入操作,但是本身并不是事務安全的。ARCHIVE存儲引擎非常適合存儲歸檔數據,如記錄日志信息可以使用ARCHIVE引擎。
表3-1 存儲引擎比較

總之,使用哪一種引擎要根據需要靈活選擇,一個數據庫中的多個表可以使用不同的引擎以滿足各種性能和實際需求,使用合適的存儲引擎,將會對整個數據庫的性能有幫助。
- UNIX編程藝術
- Mastering macOS Programming
- Python機器學習經典實例
- 青少年Python編程入門
- 組態軟件技術與應用
- 低代碼平臺開發實踐:基于React
- INSTANT Yii 1.1 Application Development Starter
- HTML+CSS+JavaScript網頁設計從入門到精通 (清華社"視頻大講堂"大系·網絡開發視頻大講堂)
- 創意UI:Photoshop玩轉APP設計
- 3ds Max印象 電視欄目包裝動畫與特效制作
- Android系統下Java編程詳解
- Professional JavaScript
- Python數據可視化之matplotlib實踐
- Ubuntu Server Cookbook
- 3D Printing Designs:Design an SD Card Holder