MySQL B Tree索引和Hash索引比較

2021-09-26 08:21:05 字數 2176 閱讀 3962

了解b-tree索引和hash索引的資料結構有助於**不同查詢在不同的儲存引擎的執**況,特別是對於允許您選擇b-tree索引或hash索引的memory儲存引擎。

b-tree索引可用於使用=, >, >=, <, <=,或者 between 等運算子的表示式中的列比較。並且在like表達是開頭不是萬用字元時,也可以用於like比較。比如下面的查詢就用到了索引

select

*from tbl_name where key_col like

'patrick%'

;select

*from tbl_name where key_col like

'pat%_ck%'

;

在第乙個查詢中like條件相當於**『patrick』 <= key_col < 『patricl』,在第二個查詢中like條件相當於』pat』 <= key_col < 『pau』**

下面的查詢就不能使用索引

select

*from tbl_name where key_col like

'%patrick%'

;select

*from tbl_name where key_col like other_col;

第乙個查詢中的like條件是萬用字元開頭的,第二個查詢中的like條件是乙個變數。所以不能使用索引。

當使用**like 『%string%』**這樣的查詢條件時,如果string的個長度大於3,mysql會使用turbo boyer-moore 演算法來初始化字串的模式,然後用此模式來更快地執行查詢。

當查詢使用col_name is null這樣的查詢條件,當col_name被索引的時候也是可以使用索引的。

當使用or拼接查詢條件時,索引必須在or的各個部分中都存在才可以用來優化查詢。

例如下面的查詢就用到了索引

select

*from

table

where index_part1=

1and index_part2=

2and other_column=

3/* 使用索引 index = 1 or index = 2 */

select

*from

table

where

index=1

or a=

10and

index=2

/* 使用索引index "index_part1='hello'" */

select

*from

table

where index_part1=

'hello'

and index_part3=

5/* 可以使用index1但是不能使用index2或者index3 */

select

*from

table

where index1=

1and index2=

2or index1=

3and index3=

3;

下面的查詢不能使用索引

/* 不符合最左字首原則 */

select

*from

table

where index_part2=

1and index_part3=

2/* 索引不是在or的每一部分都存在 */

select

*from

table

where

index=1

or a=

10/* 沒有完整的索引 */

select

*from

table

where index_part1=

1or index_part2=

10

有些時候mysql並不會使用索引,即使有索引是可用的。發生這種情況的一種情況是,優化器估計使用索引將需要mysql訪問表中非常大比例的行。(在這種情況下,表掃瞄要更快因為它需要較少的搜尋。)但是如果這樣的查詢使用limit來僅檢索某些行,那麼mysql一定會使用索引,因為這樣可以更快的在結果中找到需要返回的行。

hash索引與上面討論的有以下幾點不同

Mysql B tree索引和雜湊索引

hash 索引結構的特殊性,其檢索效率非常高,索引的檢索可以一次定位,不像b tree 索引需要從根節點到枝節點,最後才能訪問到頁節點這樣多次的io訪問,所以 hash 索引的查詢效率要遠高於 b tree 索引。可 能很多人又有疑問了,既然 hash 索引的效率要比 b tree 高很多,為什麼大...

MySQL BTree索引和hash索引的區別

備註 先說下,在 mysql 文件裡,實際上是把b 樹索引寫成了btree,例如像下面這樣的寫法 sql view plain copy create table t aid int unsigned notnull auto increment,userid int unsigned notnul...

mysql B tree索引與hash索引

一.mysql支援的索引型別 mysql的索引是在儲存引擎層實現的,即使同一種索引在不同的儲存引擎上也可能底層實現不同。1.1 b tree索引是我們最常見的索引。1 特點 使用b 樹結構儲存資料。b 樹結構特點 每乙個節點都儲存下乙個節點的指標。這樣可以方便葉子節點的遍歷。每乙個葉子節點到根節點的...