mysq索引類別

2021-07-06 05:03:29 字數 1097 閱讀 3118

索引都是在儲存引擎層面實現的

1.btree索引

使用b-tree資料結構建立的索引,索引值都是按順序存放的,儲存引擎不需要再全表掃瞄,取而代之的是從索引的根節點開始掃瞄,根節點存放了子節點的指標,隨著向下層查詢,隨著查詢值和節點值的比較(指標中右節點葉值的上下限),最終找到記錄。

btree索引可以選擇乙個或者多個列作為索引。

create table test1(

one int not null;

two int not null;

three varchar(20) not null;

key(one,two,three)

);

注意:索引對多個值的排序依然是定時的順序。

btree索引的查詢型別:全值索引,匹配最左字首(知識用多列中的一列),匹配列字首(第一列中的前面若干字元),匹配範圍值(第一類的某個範圍之間),第一列全匹配第二列範圍匹配,之訪問索引部訪問資料行。

注意:btree索引所有型別只能從第一列開始查詢,而且無法用one和three但跳過two的索引,最後如果包含範圍查詢(like 』j%' ) 那麼範圍後的條件無法使用索引的效能優化。

2.雜湊索引

基於雜湊表的實現,儲存引擎對每一行資料上索引的資料計算乙個雜湊碼,並儲存在索引中,同時雜湊表儲存指向每個資料行的指標,mysql中只有memory支援雜湊索引,如果有多個列的雜湊值相同,索引以鍊錶的形式存放多個記錄指標到同一雜湊條目或者叫桶中。

雖然雜湊索引非常快,但是有如下限制:

1.索引只包含雜湊值和行指標,不像btree儲存具體資料行,所以不能使用索引避免讀取行。

2.索引無法排序。

3.如果(a,b)在這兩個列上建立雜湊索引,如果查詢時只用了a,則無法使用該索引,因為始終使用全部內容來計算的雜湊值。

4.只支援等值比較運算(=,in(),<=>,)不支援範圍查詢。

5.雜湊衝突(不同索引列有相同的雜湊值)時,儲存引擎只有遍歷鏈條所有行指標進行比較。

6.雜湊衝突很高,維護代價高。

3.全文索引

查詢的是文字中的關鍵字,而不是比較索引值,更類似於搜尋引擎的方法,相同列上建立全文索引和btree不會用衝突。

索引結構,索引類別,慢查詢優化

索引 索引資料結構 b tree 1.磁碟讀寫代價更低 2.查詢效率更加穩定 3.更有利於對資料庫的掃瞄 hash索引 高效 缺點 1.僅僅能滿足 in 2.無法被用來避免資料的排序 3.不能利用部分索引查詢 4.不能避免表掃瞄 5.遇到大量hash重複 bitmap點陣圖索引 主要使用重複多比如性...

Mysq之索引(一) 索引資料結構

之前為了搞清楚這塊問題,看了很多文章都寫的迷迷糊糊的,我盡量寫的簡單明瞭一點,包看懂就好。先來思考索引的幾個問題?1.為什麼要給表加上主鍵?2.為什麼加索引後會使查詢變快?3.為什麼加索引後會使寫入 修改 刪除變慢?4.什麼情況下要同時在兩個欄位上建索引?帶著問題我們接下來看,索引是什麼?它的底層是...

mysq建立索引的優缺點

建立索引的優點及必要性 第一 通過建立唯一性索引,可以保證資料庫表中每一行資料的唯一性 第二 可以大大加快 資料的檢索速度,這也是建立索引的最主要的原因 第三 可以加速表和表之間的連線,特別是在實現資料的參考完整性方面特別有意義 第四 在使用分組和排序子句進行資料檢索時,同樣可以顯著減少查詢中分組和...