mysql之索引方法

2021-09-24 14:04:12 字數 1559 閱讀 1532

1.b-tree:

b-tree通常意味著所有的值都是按順序儲存的,並且每乙個葉子頁到根的距離相同。下圖展示了索引的表示方式:

b-tree 索引能過加快訪問資料的速度,因為儲存引擎不再需要進行全表掃瞄來獲取需要的資料,取而代之的是從索引的根節點開始搜尋。根節點的槽中存放了指向子節點的指標,儲存引擎根據這些指標向下層查詢。通過比較節點頁的值和要查詢的值可找到合適的指標進入下層子節點,大的往右,小的就往左。葉子節點的指標指向的是被索引的資料,而不是其他的節點頁。

2.hash:

雜湊索引是基於雜湊表實現的,只有精確匹配索引所有的列的查詢才有效。對於每一行資料,儲存引擎都會對所有的索引列計算乙個雜湊碼,雜湊碼是乙個較小的值,並且不同鍵值的行計算出來的雜湊碼也不一樣。雜湊索引是將所有的雜湊碼儲存在索引中,同時在雜湊表中儲存指向每個資料行的指標。

在mysql中,只有memory 引擎顯示支援雜湊索引。這也是memory 引擎表的預設索引型別,memory 引擎同時也支援b-tree索引。

3.區別:

hash索引的限制:

(1)hash 索引僅僅能滿足」=」,」in」和」<=>」查詢,不能使用範圍查詢。

(2)hash 索引無法進行資料的排序操作。

(3)hash 索引的組合索引不能利用部分索引列查詢。

(4)hash 索引在任何時候都不能避免全表掃瞄。

引數值通過hash演算法找到行指標,之後獲取表中的資料和引數值比較,返回結果。

(5)hash 索引遇到大量hash值相等的情況後效能並不一定就會比b-tree索引高。

對於選擇性比較低的索引鍵,如果建立 hash 索引,那麼將會存在大量記錄指標資訊存於同乙個 hash 值相關聯。這樣要定位某一條記錄時就會非常麻煩,會浪費多次表資料的訪問,而造成整體效能低下。

反之就是b-tree索引的優點。

參考:假設索引使用假象的雜湊函式 f( ),它返回下面的值(都是示例資料,非真實資料):

f('arjen')=2323;

f('liming')=7434;

f('hanfeng')=6745;

f('mars')=3245;

則雜湊索引的資料結構如下:

槽(slot)        值(value)

2323                指向第 1 行的指標

3245                指向第 4 行的指標

6745                指向第 3 行的指標

7434                指向第 2 行的指標

注意每個槽的編號是順序的,但是資料行不是。現在,來看如下查詢:

mysql> select lname from testhash where fname= 'liming';

mysql 先計算 『liming』的雜湊值,並使用該值尋找對應的記錄指標。因為f('liming')=7434,所以mysql 在索引中查詢 7434 ,可以找到指向第 2 行的指標,最後一步是比較第三行的值是否是 'liming',以確保就是要查詢的行。

mysql 索引方法 MySQL索引方法

mysql目前主要有以下幾種索引方法 b tree,hash,r tree。一 b tree b tree是最常見的索引型別,所有值 被索引的列 都是排過序的,每個葉節點到跟節點距離相等。所以b tree適合用來查詢某一範圍內的資料,而且可以直接支援資料排序 order by b tree在myis...

mysql 索引型別 索引方法

在資料庫表中,對欄位建立索引可以大大提高查詢速度。通過善用這些索引,可以令mysql的查詢和執行更加高效 2索引方法 為了使索引的使用效率更高,在建立索引時,必須考慮在哪些欄位上建立索引和建立什麼型別的索引,有7大原則 1 選擇唯一性索引 2 為經常需要排序 分組和聯合操作的字段建立索引 3 為常作...

mysql索引之聚集索引

聚集索引不是一種單獨的索引型別,而是一種儲存資料方式。其具體細節依賴於實現方式,但是innodb的聚集索引實際上在同樣的結構中儲存了b tree索引和資料行。當表有聚集索引的時候,它的資料行實際儲存在索引的葉子頁中。術語 聚集 指實際的資料行和相關的鍵值都儲存在一起。每個表只能有乙個聚集索引,因為不...