首頁>技術>

資料庫,大家都不陌生,這是程式設計師的基本技能了。當然,我們更多時候只是去了解如何使用資料庫,而對資料庫一些底層原理卻比較陌生,今天我們來了解一下,一條資料庫查詢語句的取經之路。

基本分層

個人認為,Mysql資料庫可以分為3層,連線層,邏輯層,與資料儲存層。

連線層

首先是連線層,連線層,可以理解為天庭城門的城門守衛,負責與客戶端建立連線與鑑權。在一條查詢服務發生之前,客戶端必須先通過TCP連結與Mysql資料庫建立連線,這個時候,連線層就會校驗連線的賬號跟密碼,以及所操作的資料庫是否有許可權,如果沒有許可權,或者只有讀許可權卻使用了寫命令,那麼拒絕對方進入,並返回錯誤碼。為了資料庫的效能,節約系統資源,當長連線數量超過一定限制或者對應客戶端超時,都會被強制斷開,需要下一次重連。

邏輯層

資料庫的邏輯層,主要包括這麼幾個東西,首先是快取層,哈哈,可能很多人還不知道,Mysql是有快取的!但是,Mysql的快取我們很少使用,因為Mysql的快取是這樣的,以查詢語句為key,以查詢結果為value,一旦表發生更新,那麼,快取就會失效,需要重新重新整理。除非是極限的多讀少寫場景,不然都會開銷非常大,但是這種多讀少寫的場景,我們一般都是業務自己做記憶體快取了,還減少一次RPC的時間。

緊接著便是語法分析層,要知道,唐僧是東土大唐的和尚,西天在印度,話語肯定是不通的,這就需要進行翻譯了,語法分析層乾的正是這個工作。通過語法分析,將Mysql查詢語句翻譯成機器理解的語句,這個時候,如果發現語法錯誤,那麼就會重新打回,告訴客戶端語法錯誤了,需要進行修改後再次查詢。

接下來便是優化器,大家知道,西天藏經閣的經書千千萬萬,需要知道唐僧要的經書在哪裡。這便是優化器的作用,最簡單的,優化器會根據索引進行更優的選擇,除此之外,一些join語句,優化器也可以判斷出先從哪張表中選擇會更加高效。

最後便是執行器,也就是去取經書的和尚,負責與儲存層的互動邏輯。

儲存層

儲存層,便是藏經閣了。Mysql的儲存層,有著若干種不同的儲存引擎,各個引擎各有優劣。儲存層會將執行器傳說過來的指令進行執行,然後合併出最後的執行結果,最終輸出結果。

最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 為什麼說ThreadLocal是執行緒安全的