1. 程式人生 > 其它 >mysql (3):進階篇(上)

mysql (3):進階篇(上)

一 儲存引擎

1.1 MySQL體系結構

  • 連線層
    最上層是一些客戶端和連結服務,包含本地sock 通訊和大多數基於客戶端/服務端工具實現的類似於TCP/IP的通訊。主要完成一些類似於連線處理、授權認證、及相關的安全方案。在該層上引入了執行緒池的概念,為通過認證安全接入的客戶端提供執行緒。同樣在該層上可以實現基於SSL的安全連結。伺服器也會為安全接入的每個客戶端驗證它所具有的操作許可權。

  • 服務層
    第二層架構主要完成大多數的核心服務功能,如SQL介面,並完成快取的查詢,SQL的分析和優化,部分內建函式的執行。所有跨儲存引擎的功能也在這一層實現,如 過程、函式等。在該層,伺服器會解析查詢並建立相應的內部解析樹,並對其完成相應的優化如確定表的查詢的順序,是否利用索引等,最後生成相應的執行操作。如果是select語句,伺服器還會查詢內部的快取,如果快取空間足夠大,這樣在解決大量讀操作的環境中能夠很好的提升系統的效能。

  • 引擎層
    儲存引擎層, 儲存引擎真正的負責了MySQL中資料的儲存和提取,伺服器通過API和儲存引擎進行通訊。不同的儲存引擎具有不同的功能,這樣我們可以根據自己的需要,來選取合適的儲存引擎。資料庫中的索引是在儲存引擎層實現的。

  • 儲存層
    資料儲存層, 主要是將資料(如: redolog、undolog、資料、索引、二進位制日誌、錯誤日誌、查詢日誌、慢查詢日誌等)儲存在檔案系統之上,並完成與儲存引擎的互動。

和其他資料庫相比,MySQL有點與眾不同,它的架構可以在多種不同場景中應用併發揮良好作用。主要體現在儲存引擎上,外掛式的儲存引擎架構,將查詢處理和其他的系統任務以及資料的儲存提取分離。這種架構可以根據業務的需求和實際需要選擇合適的儲存引擎。

1.2 儲存引擎介紹


大家可能沒有聽說過儲存引擎,但是一定聽過引擎這個詞,引擎就是發動機,是一個機器的核心元件。比如,對於艦載機、直升機、火箭來說,他們都有各自的引擎,是他們最為核心的元件。而我們在選擇引擎的時候,需要在合適的場景,選擇合適的儲存引擎,就像在直升機上,我們不能選擇艦載機的引擎一樣。

儲存引擎就是儲存資料、建立索引、更新/查詢資料等技術的實現方式 。儲存引擎是基於表的,而不是基於庫的,所以儲存引擎也可被稱為表型別。我們可以在建立表的時候,來指定選擇的儲存引擎,如果沒有指定將自動選擇預設的儲存引擎。
1). 建表時指定儲存引擎

CREATE TABLE 表名( 
    欄位1 欄位1型別 [ COMMENT 欄位1註釋 ] , 
    ...... 
    欄位n 欄位n型別 [COMMENT 欄位n註釋 ] 
) ENGINE = INNODB [ COMMENT 表註釋 ] ;

2). 查詢當前資料庫支援的儲存引擎
show engines;

示例演示:
A. 查詢建表語句

-- 預設儲存引擎: InnoDB
show create table account;


我們可以看到,建立表時,即使我們沒有指定儲存疫情,資料庫也會自動選擇預設的儲存引擎。