mysql索引的區別

2021-08-07 23:05:24 字數 1513 閱讀 6340

組合索引(最左字首)

alter table article add index time(title(50),time(10))

相當於建立了兩組組合索引(1)title time(2)title

fulltext

全文索引,目前只有myisam引擎支援,目前只有 char、varchar ,text 列上可以建立全文索引。它的出現是為了解決where name like 「%word

%"這類針對文字的模糊查詢效率較低的問題

hash

只有memory引擎顯式地支援這種索引

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

由於 hash 索引比較的是進行 hash 運算之後的 hash 值,所以它只能用於等值的過濾,不能用於基於範圍的過濾,因為經過相應的 hash 演算法處理之後的 hash 值的大小關係,並不能保證和hash運算前完全一樣。 

(2)hash 索引無法被用來避免資料的排序操作。 

由於 hash 索引中存放的是經過 hash 計算之後的 hash 值,而且hash值的大小關係並不一定和 hash 運算前的鍵值完全一樣,所以資料庫無法利用索引的資料來避免任何排序運算; 

(3)hash 索引不能利用部分索引鍵查詢。 

對於組合索引,hash 索引在計算 hash 值的時候是組合索引鍵合併後再一起計算 hash 值,而不是單獨計算 hash 值,所以通過組合索引的前面乙個或幾個索引鍵進行查詢的時候,hash 索引也無法被利用。 

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

前面已經知道,hash 索引是將索引鍵通過 hash 運算之後,將 hash運算結果的 hash 值和所對應的行指標資訊存放於乙個 hash 表中,由於不同索引鍵存在相同 hash 值,所以即使取滿足某個 hash 鍵值的資料的記錄條數,也無法從 hash 索引中直接完成查詢,還是要通過訪問表中的實際資料進行相應的比較,並得到相應的結果。 

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

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

btree

所有的值都順序儲存,並且每乙個葉子到根的距離相同,葉子節點有指向下乙個葉子節點的指標。每乙個葉子節點到根結點距離相同。

在 innodb裡,有兩種形態:一是primary key形態,其leaf node裡存放的是資料,而且不僅存放了索引鍵的資料,還存放了其他欄位的資料。二是secondary index,其leaf node和普通的btree差不多,只是還存放了指向主鍵的資訊.

而在myisam裡,主鍵和其他的並沒有太大區別。不過和innodb不太一樣的地方是在myisam裡,leaf node裡存放的不是主鍵的資訊,而是指向資料檔案裡的對應資料行的資訊.

**:

mysql 索引的區別 mysql索引區別

myisam主鍵索引與普通索引的區別 myisam索引檔案和資料檔案是分離的,索引檔案僅儲存資料記錄的位址。myisam的索引與行記錄是分開儲存的,叫做非聚集索引 非 unclustered index 主鍵索引與普通索引沒有本質差異 葉子節點都是儲存對應行記錄的指標。innodb主鍵索引與普通索引...

Mysql各種索引區別

mysql索引概念 說說mysql索引,看到乙個很少比如 索引就好比一本書的目錄,它會讓你更快的找到內容,顯然目錄 索引 並不是越多越好,假如這本書1000頁,有500也是目錄,它當然效率低,目錄是要佔紙張的,而索引是要佔磁碟空間的。mysql索引主要有兩種結構 b 樹和hash.hash hsah...

Mysql各種索引區別

mysql索引概念 說說mysql索引,看到乙個很少比如 索引就好比一本書的目錄,它會讓你更快的找到內容,顯然目錄 索引 並不是越多越好,假如這本書1000頁,有500也是目錄,它當然效率低,目錄是要佔紙張的,而索引是要佔磁碟空間的。mysql索引主要有兩種結構 b 樹和hash.hash hsah...