資料庫 資料庫索引原理

2021-09-24 03:32:56 字數 2130 閱讀 4720

正確的建立合適的索引 是提公升資料庫查詢效能的基礎

4.b+ tree 在兩大引擎中的體現

5.索引的原則

索引是為了加速對錶中資料行的檢索而建立的一種分散儲存的資料結構。

索引能極大的減少儲存引擎需要掃瞄的資料量

索引可以把隨機io變成順序io

索引可以幫助我們在進行分組、排序等操作時,避免使 用臨時表

b+ tree

為什麼用b+ tree? 而不用二叉樹,平衡樹

二叉樹

平橫樹圖

它太深了

資料處的(高)深度決定著他的io操作次數,io操作耗時大

它太小了 每乙個磁碟塊(節點/頁)儲存的資料量太小了,沒有很好的利用操作磁碟io的資料交換特性,也沒有利用好磁碟io的預讀能力(空間區域性性原理),從而帶來頻繁的io操作。磁碟io操作是以頁為單位,每一頁可以儲存4kb的資料。

b 樹

每個節點上可以有多個關鍵字,每個節點都儲存著關鍵字對應的資料。

子節點不儲存父節點的關鍵字

b+ 樹

b+樹與b 樹區別:

1,b+節點關鍵字搜尋採用閉合區間

2,b+非葉節點不儲存資料相關資訊,只儲存關鍵字和子節點的引用

3,b+關鍵字對應的資料儲存在葉子節點中

4,b+葉子節點是順序排列的,並且相鄰節點具有順序引用的關係

b+樹是b-樹的變種(plus版)多路絕對平衡查詢樹,他擁有b-樹的優勢

b+樹掃庫、表能力更強

b+樹的磁碟讀寫能力更強

b+樹的排序能力更強

b+樹的查詢效率更加穩定

主鍵索引屬於聚集索引

5.1 離散性越高越好

5.2 最左匹配原則

對索引中關鍵字進行計算(對比),一定是從左往右依次進行,且不可跳過

5.3 索引列的資料長度能少則少

5.4 匹配列字首可用到索引 like %9999%、like %9999用不到索引;

5.5 where 條件中 not in 和 <>操作無法使用索引

5.6 多用指定列查詢,只返回自己想到的資料列,少用select *,這樣有可能用到覆蓋索引;

5.7 索引上不加計算

聯合索引:

聯合索引列選擇原則

1,經常用的列優先 【最左匹配原則】

2,選擇性(離散度)高的列優先【離散度高原則】

3,寬度小的列優先【最少空間原則】

聯合索引中如果不是按照索引最左列開始查詢,無法使用索引;

聯合索引中精確匹配最左前列並範圍匹配另外一列可以用到索引;

聯合索引中如果查詢中有某個列的範圍查詢,則其右邊的所有列都無法使用索引;

參考文章:

資料庫原理 索引

一 索引的概念 索引就是加快檢索表中資料的方法。資料庫的索引類似於書籍的索引。在書籍中,索引允許使用者不必翻閱完整個書就能迅速地找到所需要的資訊。在資料庫中,索引也允許資料庫程式迅速地找到表中的資料,而不必掃瞄整個資料庫。二 索引的特點 1.索引可以加快資料庫的檢索速度 2.索引降低了資料庫插入 修...

資料庫索引原理

說白了,索引問題就是乙個查詢問題。資料庫索引,是資料庫管理系統中乙個排序的資料結構,以協助快速查詢 更新資料庫表中資料。索引的實現通常使用b樹及其變種b 樹。在資料之外,資料庫系統還維護著滿足特定查詢演算法的資料結構,這些資料結構以某種方式引用 指向 資料,這樣就可以在這些資料結構上實現高階查詢演算...

資料庫索引原理

說白了,索引問題就是乙個查詢問題。資料庫索引,是資料庫管理系統中乙個排序的資料結構,以協助快速查詢 更新資料庫表中資料。索引的實現通常使用b樹及其變種b 樹。在資料之外,資料庫系統還維護著滿足特定查詢演算法的資料結構,這些資料結構以某種方式引用 指向 資料,這樣就可以在這些資料結構上實現高階查詢演算...