文章目錄
前言
正確的創建合適的索引是提升數據庫查詢性能的基礎。
敘述
放張思維導圖,首先大概的瞭解一下Mysql索引。圖片上放大看的更加清楚哦。
why
爲什麼用索引
- 索引能極大的減少存儲引擎需要掃描的數據量
- 索引可以把隨機IO變成順序IO
- 索引可以幫助我們在進行分組、排序等操作時,避免使用臨時表
mysql爲什麼選擇B+ Tree
- B+樹是B-樹的變種(PLUS版)多路絕對平衡查找樹,他擁有B-樹的優勢
- B+樹掃庫、表能力更強
- B+樹的磁盤讀寫能力更強
- B+樹的排序能力更強
- B+樹的查詢效率更加穩定
what
索引本質
索引是爲了加速對錶中數據行的檢索而創建的一種分散存儲的數據結構
索引原則
正確的創建合適的索引是提升數據庫查詢性能的基礎
樹類型VS
二叉查找樹
平衡二叉查找樹
特點:
它是一 棵空樹或它的左右兩個子樹的高度差的絕對值不超過1,並且左右兩個子樹都是一棵平衡二叉樹。
原理圖:
缺點:
- 太深了
- 數據處的(高)深度決定着他的1O操作次數,I0操作耗時大
- 太小了
- 每一個磁盤塊(節點/頁)保存的數據量太小了
- 沒有很好的利用操作磁盤IO的數據交換特性
- 也沒有利用好磁盤IO的預讀能力(空間局部性原理),從而帶來頻繁的IO操作
多路平衡查找樹(B-樹)
特點:
- 結構爲矮胖
- 磁盤級索引
- 按區間劃分
- 路(分支,子節點)=關鍵字+1
原理圖:
缺點:
每一個磁盤塊中都存有數據。
加強版多路平衡查找樹(B+樹)
特點:
- 關鍵字搜索採用左閉區間
- 非葉節點不保存數據,保存關鍵字和引用
- 葉子節點保存關鍵字對應的數據
- 葉子節點是順序排序的,相鄰節點有順序引用的關係
原理圖:
B+TREE與B-TREE的區別:
- B+節點關鍵字搜索採用閉合區間
- B+非葉節點不保存數據相關信息,只保存關鍵字和子節點的引用
- B+關鍵字對應的數據保存在葉子節點中
- B+葉子節點是順序排列的,並且相鄰節點具有順序引用的關係
how
Mysql B+Tree索引體現形式如下:
Myisam
原理圖
特點
兩個文件:MYI(索引),MYD(數據)
Innodb
原理圖
特點
一個文件:IBD(數據)
where
最佳實踐
列的離散性
- 特點
- 越大離散性越好
- 原理
- count(distinct col):count(col)
最左匹配原則
- 關鍵字是從左到右進行對比,不可跳過
聯合索引
- 單列索引
- 節點中關鍵字[name]
- 聯合索引
- 原理
- 節點中關鍵字[name,phoneNum]
- 原則
- 經常用的列優先【最左匹配原則】
- 選擇性(離散度)高的列優先【離散度高原則】
- 寬度小的列優先【最少空間原則】
- 原理
覆蓋索引
- 索引節點中的關鍵字直接返回查詢列
小結
越來越優秀,加油。
感謝您的閱讀~~