1. 程式人生 > >菜鳥崛起 DB Chapter 4 MySQL 5.6的數據庫引擎

菜鳥崛起 DB Chapter 4 MySQL 5.6的數據庫引擎

需要 操作系統 並發控制 客戶端 改變 一個數據庫 apt 限制 文件的

數據庫存儲引擎是數據庫底層的軟件組件,我們平常看不到,但是卻與我們操作數據庫息息相關。DBMS使用數據引擎進行創建、查詢、更新和刪除數據操作。不同的存儲引擎提供不同的存儲機制、索引技巧、鎖定水平等功能,使用不同的存儲引擎,還可以獲得特定的功能。現在很多數據庫都支持多種不同的數據庫引擎,MySQL的核心就是存儲引擎。下面我們就來認識一下。

4.1 什麽是引擎

MySQL提供了多個不同的存儲引擎,包括處理事務安全表的引擎和處理非事務安全表的引擎。在MySQL中,不需要在整個服務器中使用同一種存儲引擎,針對具體的要求,可以對每一個表使用不同的存儲引擎。可以使用SHOW ENGINES語句查看系統所支持的引擎類型,結果如下:

技術分享圖片

Support列的值表示當前引擎是否能使用,YES表示可以使用,NO表示不能使用,DEFAULT表示為當前默認引擎,從上面我們知道當前默認引擎是InnoDB.

4.2 InnoDB存儲引擎

InnoDB事務性數據庫的首選引擎,支持事務安全表(ACID),支持行鎖定和外鍵。MySQL5.5.5之後。InnoDB作為默認存儲引擎,InnoDB主要特性有:

  • InnoDBMySQL提供了具有提交、回滾和崩潰恢復能力的事務安全(ACID兼容)存儲引擎。InnoDB鎖定在行級並且也在SELECT語句總提供一個類似Oracle的非鎖定讀。這些功能增加了多用戶部署和性能。在SQL查詢中,可以自由地將
    InnoDB類型的表與其他MySQL的表的類型混合起來,甚至在同一查詢中也可以混合。
  • InnoDB是為處理巨大數據量的最大性能設計。它的CPU效率可能是任何其他基於磁盤的關系數據庫引擎所不能匹敵的。
  • InnoDB存儲引擎完全與MySQL服務器整合,InnoDB存儲引擎為在主內存中緩存數據和索引而維持它自己的緩沖池。InnoDB將它的表和索引在一個邏輯表空間中,表空間可以包含數個文件(或原始磁盤分區)。這與MyISAM表不同,比如在MyISAM表中每個表被存在分離的文件中。InnoDB表可以是任何尺寸,即使在文件尺寸被限制為2GB的操作系統上。
  • InnoDB支持外鍵完整性約束(FOREIGN KEY
    )。存儲表中的數據時,每張表的存儲都按主鍵順序存放,如果沒有顯示在表定義時指定主鍵,InnoDB會為每一行生成一個6字節的ROWID,並以此作為主鍵。
  • InnoDB被用在眾多需要高性能的大型數據庫站點上。

InnoDB不創建目錄,使用InnoDB時,MySQL將在MySQL數據目錄下創建一個名為ibdatal10M大小的自動擴展數據文件,以及兩個名為ib_ligfile9ib_logfilel15MB大小的日誌文件。

技術分享圖片

4.3 MyISAM存儲引擎

MyISAM基於ISAM存儲引擎,並對其進行擴展。它是在Web、數據倉儲和其他應用環境下最常使用的存儲引擎之一。MyISAM擁有較高的插入、查詢速度,但不支持事務。在MySQL5.5.5之前的版本中,MyISAM是默認存儲引擎。MyISAM主要特性有:

  • 大文件(達63位文件長度)在支持大文件的文件系統和操作系統上被支持。
  • 當把刪除和更新及插入操作混合使用的時候,動態尺寸的行產生更少碎片。還要通過合並相鄰被刪除的塊,以及若下一個塊被刪除,就擴展到下一塊來自動完成。
  • 每個MyISAM表最大的索引數是64,這可以通過重新編譯來改變。每個索引最大的列數是16個。
  • 最大的鍵長度是1000字節,這也可以通過編譯來改變。對於鍵長度超過250字節的情況,一個超過1024字節的鍵將被用上。
  • BLOBTEXT列可以被索引。
  • NULL值被允許在索引的列中。這個值占每個鍵的0-1個字節。
  • 所有數字鍵值以高字節優先被存儲以允許一個更高的索引壓縮。
  • 每表一個AUTO_INCREMENT列的內部處理。MyISAMINSERTUPDATE操作自動新這一列,這使得AUTO_INCREMENT列更快(至少10%)。在序列項的值被刪除之後就不能再利用。

4.4 MEMORY存儲引擎

MEMORY存儲引擎將表中的數據存儲到內存中,為查詢和引用其他數據提供快速訪問。

MEMORY主要特性有:

  • MEMORY表的每個表可以有多達32個索引,每個索引16列,以及500字節的最大鍵長度。
  • MEMORY存儲引擎執行HASHBTREE索引。
  • 可以在一個MEMORY表中的非唯一鍵。
  • MEMORY表使用一個固定的記錄長度格式。
  • MEMORY不支持BLOBTEXT列。
  • MEMORY支持AUTO_INCREMENT列和對可包含NULL值的列的索引。
  • MEMORY表在所有客戶端之間共享(就像其他任何非TEMPORARY表)。
  • MEMORY表內容被存在內存中,內存是MEMORY表和服務器在查詢處理時的空閑中,創建的內部表共享。
  • 當不再需要MEMORY表的內容時,要釋放被MEMORY表使用的內存,應該執行DELETE FROMTRUNCATE TABLE,或者刪除整個表(使用DROP TABLE)。

4.5 存儲引擎的選擇

不同存儲引擎有各自不同的特點,以適應不同的需求,如下表所示。為了做出選擇,首先需要考慮每一個存儲引擎提供了哪些不同的功能。

技術分享圖片

如果要提供提交,回滾和崩潰恢復能力的事務安全(ACID兼容)能力,並要求實現並發控制,InnoDB是個很好的選擇,如果數據表主要用來插入和查詢記錄,則MyISAM引擎能提供較高的處理效率:如果只是臨時存放數據,數據量不大,並且不需要較高的數據安全性,可以選擇將數據保存在內存中的MEMORY引擎,MySQL中使用該引擎作為臨時表,存放查詢的中間結果。如果只有INSERTSELECT操作,可以選擇Archive引擎,Archive存儲引擎支持高並發的插入操作,但是本身並不是事務安全的。Archive存儲引擎非常適合存儲歸檔數據,如記錄日誌信息可以使用Archive引擎。

使用哪一種引擎要根據需求靈活選擇,一個數據庫中多個表可以使用不同的引擎以滿足各種性能和實際需求。使用合適的存儲引擎,將會提高整個數據庫的性能。

菜鳥崛起 DB Chapter 4 MySQL 5.6的數據庫引擎