1. 程式人生 > 資料庫 >關於MySQL的學習及相關調優

關於MySQL的學習及相關調優

記錄一下MySQL相關的學習歷程

MySQL簡單看分成三層,client、server、儲存引擎

  • 使用者從client端傳送一個請求到server端,

  • server端會建立一個連線資訊【驗證使用者名稱密碼等資訊】

  • 然後將使用者傳送的sql請求進行分析【經過分析器】,將sql的關鍵字等資訊進行提取分析,

  • 然後將sql語句進行優化【優化器,MySQL自帶sql優化】

  • 後面經過執行器,執行器將和儲存引擎進行互動(經過儲存引擎從磁碟讀取資料,即IO)

優化分兩種:RBO、CBO

  • RBO:基於規則的優化

  • CBO:基於成本的優化(大部分採用這種)

索引面試技術名詞 回表:當查詢資料時用到普通索引,第一次是在普通索引樹上查詢並返回主鍵值,再根據主鍵值去索引樹中查詢對應行的資料 覆蓋索引:
當根據索引樹查詢資料時,返回的結果就是需要查詢的值,不需要回表操作,叫做覆蓋索引 最左匹配:where條件中開始的列應該是組合索引最左開始的列 索引下推:當通過組合索引中某個列查詢資料時,會自動將組合索引另外的相關列資訊一起查詢並返回,以滿足可能被使用的情況,叫做索引下推   聚簇索引:不是單獨的索引型別,而是一種資料儲存方式,指的是資料行跟相鄰的鍵值緊湊的儲存在一起 非聚簇索引:資料檔案跟索引檔案分開存放   索引採用的資料結構 雜湊:memory引擎,雜湊儲存在記憶體中,剛好滿足memory引擎,不能持久化 缺點: 1、利用hash儲存的話需要將所有的資料檔案新增到記憶體,比較耗費記憶體空間 2、如果所有的查詢都是等值查詢,那麼hash確實很快,但是在企業或者實際工作環境中範圍查詢的資料更多,而不是等值查詢,因此hash就不太適合了   B+樹:innodb引擎
,採用B+樹的儲存結構 B+Tree是在BTree的基礎之上做的一種優化,變化如下:     1、B+Tree每個節點可以包含更多的節點,這個做的原因有兩個,第一個原因是為了降低樹的高度,第二個原因是將資料範圍變為多個區間,區間越多,資料檢索越快     2、非葉子節點儲存key,葉子節點儲存key和資料     3、葉子節點兩兩指標相互連線(符合磁碟的預讀特性),順序查詢效能更高 注意: 1、InnoDB是通過B+Tree結構對主鍵建立索引,然後葉子節點中儲存記錄,如果沒有主鍵,那麼會選擇唯一鍵,如果沒有唯一鍵,那麼會生成一個6位的row_id來作為主鍵 2、如果建立索引的鍵是其他欄位,那麼在葉子節點中儲存的是該記錄的主鍵,然後再通過主鍵索引找到對應的記錄,叫做 回表
注意: 在B+Tree上有兩個頭指標,一個指向根節點,另一個指向關鍵字最小的葉子節點,而且所有葉子節點(即資料節點)之間是一種鏈式環結構。 因此可以對 B+Tree 進行兩種查詢運算:一種是對於主鍵的範圍查詢和分頁查詢,另一種是從根節點開始,進行隨機查詢。   MyISAM儲存引擎 採用B+樹,但是葉子節點存放的不是行資料,因為MyISAM在磁碟儲存時有三個檔案,分別是表結構檔案、索引檔案、資料檔案;索引和資料是分別儲存的,所以在使用MyISAM儲存引擎時,葉子節點存放的是指向資料檔案在磁碟存放的物理位置,而非實際的資料庫儲存的行資料  

紅黑(Red-black)樹

       是一種自平衡二叉查詢樹,1972年由Rudolf Bayer發明,它與AVL樹類似,都在插入和刪除操作時能通過旋轉操作保持二叉查詢樹的平衡,以便能獲得高效的查詢效能。它可以在 O(logn) 時間內做查詢,插入和刪除等操作。紅黑樹是2-3-4樹的一種等同,但有些紅黑樹設定只能左邊是紅樹,這種情況就是2-3樹的一種等同了。對於AVL樹來說,紅黑樹犧牲了部分平衡性以換取插入/刪除操作時少量的旋轉操作,整體來說效能要優於AVL樹。

特點:

       節點是紅色或黑色。

       根節點是黑色。

       每個葉節點(NIL節點)是黑色的。

       每個紅色節點的兩個子節點都為黑色。(從每個葉子到根的所有路徑上不能有兩個連續的紅色節點)

       從任一節點到其每個葉子的所有路徑都包含相同數目的黑色節點。

       最長路徑不超過最短路徑的2倍

 

 

 

 

 

左旋: 逆時針旋轉,父節點被自己的右孩子取代,而自己成為自己的左孩子

右旋:順時針旋轉,父節點被做孩子取代,而自己成為自己的右孩子

行專列:   分割槽表:

 

日誌儲存及作用 Redo log:innodb儲存引擎的日誌檔案     當傳送資料修改的時候,innodb引擎會先將記錄寫到redo log中,並更新記憶體,此時更新算是完成了,同時innodb引擎會在合適的時候將記錄寫入到磁碟中     Redo log是固定大小的,迴圈寫的過程     有了Redo log,innodb保證了即使資料庫發生異常重啟,之前的記錄也不會丟失,叫做crash-safe

 

Undo log:innodb儲存引擎日誌        binlog:服務端的日誌檔案      資料更新的流程       兩階段提交:寫入redo,prepare階段;寫入binlog,commit階段;資料和日誌分離    

意向共享鎖、意向排他鎖、間隙鎖、自增鎖

innodb 讀寫鎖

select lock in share mode 

select for update

相關點要多使用多練習