索引合併和組合索引的比較

2021-06-20 22:28:02 字數 1445 閱讀 2445

在教務系統補考子系統的開發過程中,安排考場的演算法運算時間非常慢,需要32

秒才能完成考場的分配。查詢原因,由於需要在學生補考科目表裡面進行查詢資料——該錶的資料目前已達

200萬條,所以演算法的大部分時間都花在查詢資料方面。為了解決以上問題,我們決定對資料表進行分析,建立合適的索引。

在建立索引過程中,我們發現查詢語句已經為查詢列建立了索引,但是是為每個列單獨建立的——select  *  from table_name  where col1=』abc』  and  col2=123;

為了重點說明原理,我簡化了示例。在以上示例中,查詢語句的查詢條件有2

個列,分別是

col1

和col2

。我們為

col1

(index1

)和col2(index2)

都分別建立了乙個索引。建立好索引後,我們進行了測試,發現速度沒有非常明顯的加速,還是需要

20多秒。優化效果不明顯。

然後我們嘗試了在col1

和col2

上建立組合索引,效果非常明顯,從

32秒到目前的

8秒。針對這種情況,我深入研究了一下,在

2個列上單獨建立索引,如果查詢語句使用到,叫合併索引;如果是在

2個列上建立組合索引,就叫組合索引。下面通過原理來解釋一下合併索引和組合索引的區別,也講解一下為什麼組合索引會比合併索引要快許多。

首先解釋一下合併索引的搜尋步驟,如下圖所示:

上面步驟可以用下圖進行說明:

如下圖所示,單獨的2

個索引進行查詢——索引合併,需要反覆在

2個索引表間進行跳轉,這是造成速度慢的第乙個影響。第

2個影響是,假設滿足

col1=』abc』的資料有5

行,滿足

col2=123

的資料有

1000

行。最壞的情況下(那5行在

col2

的1000

行最後面)需要掃瞄完

col2

的1000

行才能找到需要的資料,並不能達到快速查詢的目的。

下面我們來講解一下組合索引,由於組合索引綜合儲存了col1

和col2

的資料,它不需要在

2個索引表之間跳轉,所以速度會更快,組合索引的搜尋步驟如下圖所示:

上圖是索引合併和組合索引的對比圖。組合索引不需要像索引合併那樣對索引的rowid

進行比較合併。

以上就是對索引合併於組合索引區別的說明,另外補充一點,在什麼情況下使用組合索引比較好——在查詢條件中對索引列使用了等值比較時,組合索引才能發揮最大的效能。

mysql的組合索引 mysql 組合索引

mysql單列索引是我們使用mysql資料庫中經常會見到的,mysql單列索引和組合索引的區別可能有很多人還不是十分的了解,下面就為您分析兩者的主要區別,供您參考學習。為了形象地對比兩者,再建乙個表 create table myindex i testid int not null auto in...

組合索引的索引結構

在網路上有很多mysql的索引的結構的介紹,相信你對索引的結構已經非常了解了,關於組合索引呢?組合索引是在b 樹中的結構是怎麼樣的?怎麼排序的?索引中相同的值,儲存的id是什麼結構?在本篇文章中就跟你一一說明 一 組合索引的圖示 話不多說,直接上圖 上面是根據身高年齡建立的組合索引 height,a...

復合索引(組合索引)

使用者可以在多個列上建立索引,這種索引叫做復合索引 組合索引 1.何時是用復合索引 在where條件中字段用索引,如果用多字段就用復合索引。比如在查詢位址的時候,經常要求輸入省,市資訊,如果同時在省,市上建立索引,將會提高查詢速度。2.對於復合索引,在查詢使用時,最好將條件順序按找索引的順序,這樣效...