【新炬網路名師大講堂】初識mysql的體系結構

shsnchyw發表於2014-12-22

Mysql的體系結構封裝著SQL介面、查詢解析器、查詢最佳化器和查詢執行引擎、快取/緩衝機制以及一個外掛式儲存引擎。

Connectors:

是一些用來與客戶端應用程式建立連線的資料庫介面。

 

connection pool:連線池

該層負責處理與使用者訪問有關的各種使用者登入、執行緒處理、記憶體和程式快取需求。

 

SQL Interface : SQL介面

SQL介面提供了從使用者接收命令並把結果返回給使用者的機制。

MySQL伺服器從網路接收連線請求併為每個連線建立一個執行緒。建立出一個執行緒之後,MySQL伺服器將開始解析SQL命令並把解析出來的各個部分儲存到一個內部資料結構裡去。

 

Parser: 解析器

當收到客戶端發出的查詢併為之建立一個新執行緒之後,SQL語句將被傳遞到解析器接受語法驗證(或因錯誤而被拒絕)。

MySQL的解析器讀入SQL語句並把該表示式與在原始碼裡定義的規則進行比較。

在解析器標識該正規表示式並把查詢語句分解成一系列基本元素後,它將把適當的命令型別分配給相應的執行緒結構並把控制權返回給命令處理器。解析器生成的查詢結構將被傳遞到查詢處理器,從那開始的後續工作將由查詢最佳化器負責。

查詢解析器只檢查SQL語句的語法正確定,它不檢查有關的表或屬性(欄位)是否存在,也不檢查語義錯誤(比如沒有寫出必要的GROUP BY子句)。這些事情由最佳化器檢查。

 

Optimizer: 查詢最佳化器

最佳化器使用了一種“選取-投影-聯結”策略來處理查詢,即先根據又換的限制條件進行選取(SELECT操作)以減少將要處理的元組的個數,再進行投影以減少被選取元組裡的屬性(欄位)的個數,最後根據聯結條件生成最終的查詢結果。
最佳化器規則:

@ 透過計算where子句裡的表示式來橫向排除多餘的資料。

@ 只保留在屬性(欄位)清單裡列出的,以及在最後執行聯結子句時還需要用到的屬性(欄位),其他資料全部排除。

@ 根據聯結條件生成最終的查詢結果

 

最佳化器裡的第一步: 是檢查有關表是否存在以及使用者是否有訪問許可權;如果發現錯誤,返回一條相應的出錯資訊並把控制權交還給執行緒管理器。一旦找到了正確的表,就開啟並應用適當的併發控制鎖。

最佳化器裡的第二步:在所有的維護和初始化任務全部完成後,最佳化器將使用內部查詢結構對查詢命令中的where條件進行處理(選取操作),其結果作為臨時表返回供後續步驟做進一步處理。

最佳化器裡的第三步:執行投影操作。 投影操作的執行的中間結果仍儲存在臨時表裡,且只儲存那些由SELECT語句中的列規範所執行的屬性。、

最佳化器裡的第四步: 檢查LEX結構裡有沒有用聯結類給出的JOIN條件;如果有,呼叫join::optimize()方法。

 

查詢的執行:

查詢的具體執行是由一組庫方法實現的,每種方法負責完成一種特定的查詢操作。

 

查詢快取:

查詢快取不僅可以快取查詢結構,還可以快取查詢結果本身.

如果某個查詢的結果就在快取裡,系統就可以直接取出那些資料返回給客戶端而跳過整個查詢最佳化和執行階段,

 

Cache和Buffer:快取和緩衝區

緩衝區和緩衝區子系統負責保證使用頻率最高的資料或結構能夠以最有效率的方式被訪問。

快取機制包含一些小快取:

@表快取

@記錄快取

@鍵快取

@許可權快取

@主機名快取

@其他快取機制

 

Engine :儲存引擎

外掛式儲存引擎的核心是檔案訪問層的一個抽象介面,任何人都可以利用這個API介面去建立新的檔案訪問機制。

外掛式儲存引擎最讓人感興趣的地方是允許你在一個給定的資料庫裡為每個表指定一個不同的儲存引擎,你甚至可以在建立一個表之後改變它的儲存引擎。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29960155/viewspace-1376284/,如需轉載,請註明出處,否則將追究法律責任。

相關文章