MySQL 學習筆記三【索引優化】

============================================

MySQL學習筆記【第三部分】

============================================

一. Explain關鍵字

在這裏插入圖片描述
Explain已在上一章節詳細介紹過了,這裏只是爲了讓讀者對Explain有個整體概念。

二. B-Tree、B+Tree

1.B-Tree

在這裏插入圖片描述在這裏插入圖片描述

2.B+Tree

B+樹可以說是B樹的一種變形,它把數據都存儲在葉結點,而內部結點只存關鍵字和孩子指針,因此簡化了內部結點的分支因子,B+樹遍歷也更高效,其中B+樹只需所有葉子節點串成鏈表這樣就可以從頭到尾遍歷,其中內部結點是並不存儲信息,而是存儲葉子結點的最小值作爲索引
B+樹用於數據庫和文件系統中,NTFS等都使用B+樹作爲數據索引,
1)有n棵子樹的結點含有n個關鍵字,每個關鍵字都不會保存數據,只會用來索引,並且所有數據都會保存在葉子結點;
2)所有的葉子結點包含所有關鍵字信息以及指向關鍵字記錄的指針,關鍵字自小到大順序連接;
在這裏插入圖片描述
爲什麼說B+樹比B樹更適合做操作系統的數據庫索引和文件索引?
(1)B+樹的磁盤讀寫的代價更低
(2)B+樹的查詢更加的穩定
(3)B+樹是B-樹的變種(PLUS版)多路絕對平衡查找樹,他擁有B-樹的優勢
(4) B+樹掃庫、表能力更強
(5)B+樹的磁盤讀寫能力更強
(6)B+樹的排序能力更強

B-Tree、B+Tree區別

  • B+節點關鍵字搜索採用閉合區間
  • B+非葉節點不保存數據相關信息,只保存關鍵字和子節點的引用
  • B+關鍵字對應的數據保存在葉子節點中
  • B+葉子節點是順序排列的,並且相鄰節點具有順序引用的關係

三. 索引優化詳解

1.MySQL中的B+Tree體現形式

Myisam
在這裏插入圖片描述在這裏插入圖片描述
InnoDB
在這裏插入圖片描述在這裏插入圖片描述Myisam Vs InnoDB
在這裏插入圖片描述

2.索引知識補充

正確的創建合適的索引 是提升數據庫查詢性能的基礎

爲什麼要使用索引?

  • 索引能極大的減少存儲引擎需要掃描的數據量
  • 索引可以把隨機IO變成順序IO
  • 索引可以幫助我們在進行分組、排序等操作時,避免使 用臨時表

選擇性
在這裏插入圖片描述
離散型
在這裏插入圖片描述
索引選擇原則
在這裏插入圖片描述

聚簇索引和非聚簇索引

innodb的次索引指向對主鍵的引用 (聚簇索引)
myisam的次索引和主索引 都指向物理行 (非聚簇索引)

聚簇索引是對磁盤上實際數據重新組織以按指定的一個或多個列的值排序的算法。特點是存儲數據的順序和索引順序一致。一般情況下主鍵會默認創建聚簇索引,且一張表只允許存在一個聚簇索引(理由:數據一旦存儲,順序只能有一種)。
在《數據庫原理》一書中是這麼解釋聚簇索引和非聚簇索引的區別的:聚簇索引的葉子節點就是數據節點,而非聚簇索引的葉子節點仍然是索引節點,只不過有指向對應數據塊的指針。

聚簇索引的優點:

  • 聚簇索引的更新代價比較高,如果更新了行的聚簇索引列,就需要將數據移動到相應的位置。這可能因爲要插入的頁已滿而導致“頁分裂”。
  • 插入速度嚴重依賴於插入順序,按照主鍵進行插入的速度是加載數據到Innodb中的最快方式。如果不是按照主鍵插入,最好在加載完成後使用OPTIMIZE TABLE命令重新組織一下表。
  • 聚簇索引在插入新行和更新主鍵時,可能導致“頁分裂”問題。
  • 聚簇索引可能導致全表掃描速度變慢,因爲可能需要加載物理上相隔較遠的頁到內存中(需要耗時的磁盤尋道操作)。

聚簇索引的缺點:

  • 聚簇索引將索引和數據行保存在同一個B-Tree中,查詢通過聚簇索引可以直接獲取數據,相比非聚簇索引需要第二次查詢(非覆蓋索引的情況下)效率要高
  • 聚簇索引對於範圍查詢的效率很高,因爲其數據是按照大小排列的。
3.索引優化口訣

全值匹配我最愛,最左前綴要遵守;
帶頭大哥不能死,中間兄弟不能斷;
索引列上少計算,範圍之後全失效;
LIKE百分寫最右,覆蓋索引不寫*;
不等空值還有OR,索引影響要注意;
VAR引號不可丟, SQL優化有訣竅。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章