mysql聚合索引 組合索引

2021-10-07 17:01:25 字數 3770 閱讀 3682

索引

排好序的快速查詢資料結構。在資料之外,資料庫系統還維護著滿足特定查詢演算法的資料結構,這些資料結構以某種方式引用(指向)資料,這樣就可以在這些資料結構上實現高階查詢演算法。這種資料結構,就是索引。下圖就是一種可能的索引方式示例:資料本身之外,資料庫還維護著乙個滿足特定查詢演算法的資料結構,這些資料結構以某種方式指向資料,這樣就可以在這些資料結構的基礎上實現高階查詢演算法,這種資料結構就是索引。

聚合索引

聚集索引乙個表只能有乙個,而非聚集索引乙個表可以存在多個聚集索引儲存記錄是物理上連續存在,而非聚集索引是邏輯上的連續,物理儲存並不連續聚集索引:物理儲存按照索引排序;聚集索引是一種索引組織形式,索引的鍵值邏輯順序決定了表資料行的物理儲存順序非聚集索引:物理儲存不按照索引排序;非聚集索引則就是普通索引了,僅僅只是對資料列建立相應的索引,不影響整個表的物理儲存順序.

索引是通過二叉樹的資料結構來描述的,我們可以這麼理解聚簇索引:索引的葉節點就是資料節點。而非聚簇索引的葉節點仍然是索引節點,只不過有乙個指標指向對應的資料塊。

非聚合索引會造成二次查詢的問題前提 已經存在索引 areaid

實驗:

# 查詢的時候使用了索引

# 查詢過areaid的值後,又進行了二次查詢得到 area

對於二次查詢的問題, 可以使用下面的組合索引方式來解決!

組合索引 ( 覆蓋索引 )

組合索引就是給資料庫中的多列新增索,如新增一下的組合索引,其中組合索引先安裝第一列排序,然後在第一列排序的基礎上排序第二列,依次類推。如果第一列沒有用到索引,那後面用到的索引也就會失效了。

(a,b,c)
根據mysql的最左匹配原則,從最左邊開始匹配。

where a =

1and b =

2and c =

4# 全部起作用

where b =

1and a =

2and c =

4# 全部起作用 條件的順序會優化

where b =

2and c =

4# 此時 a 是個斷點,a後面的索引全部失效, 此寫法組合索引無作用

where a =

1and c =

2# a 是起到作用的, c無作用

組合索引使用判斷:

(0) select * from mytable where a=3 and b=5 and c=4;

abc三個索引都在where條件裡面用到了,而且都發揮了作用

(1) select * from mytable where c=4 and b=6 and a=3;

這條語句列出來只想說明 mysql沒有那麼笨,where裡面的條件順序在查詢之前會被mysql自動優化,效果跟上一句一樣

(2) select * from mytable where a=3 and c=7;

a用到索引,b沒有用,所以c是沒有用到索引效果的

(3) select * from mytable where a=3 and b>7 and c=3;(範圍值就算是斷點)

a用到了,b也用到了,c沒有用到,這個地方b是範圍值,也算斷點,只不過自身用到了索引

(4) select * from mytable where b=3 and c=4;

因為a索引沒有使用,所以這裡 bc都沒有用上索引效果

(5) select * from mytable where a>4 and b=7 and c=9;

a用到了 b沒有使用,c沒有使用

(6) select * from mytable where a=3 order by b;

a用到了索引,b在結果排序中也用到了索引的效果,前面說了,a下面任意一段的b是排好序的

(7) select * from mytable where a=3 order by c;

a用到了索引,但是這個地方c沒有發揮排序效果,因為中間斷點了,使用 explain 可以看到 filesort

(8) select * from mytable where b=3 order by a;

b沒有用到索引,排序中a也沒有發揮索引效果l實驗

1、建立索引

2、測試最好

按照順序查詢的結果,符合最左原則。

explain select * from area  where areaid = '110116' and area = '懷柔區' and fatherid = '110100'

3、測試不符合最左情況

explain

select

*from area where area =

'懷柔區'

and fatherid =

'110100'

把首列索引刪去之後的查詢效果, 3144行

mysql 聚合索引

一 建立索引 1.primary key id 2.unique key uid uid task id 查詢 explain select from user task where uid 232 explain select from user task where task id 1454 e...

mysql的組合索引 mysql 組合索引

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

mysql組合索引 Mysql之組合索引方法詳解

對於任何dbms,索引都是進行優化的最主要的因素。對於少量的資料,沒有合適的索引影響不是很大,但是,當隨著資料量的增加,效能會急劇下降。如果對多列進行索引 組合索引 列的順序非常重要,mysql僅能對索引最左邊的字首進行有效的查詢。例如 假設存在組合索引 c1,c2 查詢語句select from ...