聯合索引 各種索引

2021-09-25 21:29:35 字數 1444 閱讀 6813

聚集索引和非聚集索引

資料庫中b+樹索引可以分為聚集索引和非聚集索引(輔助索引)

聚集索引

每張表只有乙個聚集索引,且是建立在主鍵上面的。

主鍵索引

在innodb儲存引擎中,每張表都有個主鍵,如果在建立表時沒有顯式地定義主鍵,則innodb儲存引擎會按如下方式選擇或建立主鍵

首先判斷表中是否存在非空的唯一索引,如果有,則該列即為主鍵

如果不符合上述條件,innodb儲存引擎自動建立乙個6位元組大小的指標。

聯合索引

聯合索引在表上的多個列進行索引。

1.聯合索引

建立如下的表,並建立乙個聯合索引(a,b)

create table t(

a int,

b int,

primary key (a),

key idx_a_b (a,b)

)engine=innodb

聯合索引的b+樹如下。通過葉子節點可以邏輯上順序的讀出所有資料,(1,1),(1,2),(2,1),(2,4),(3,1),(3,2)

2.能夠使用聯合索引的情況

①全匹配

select * from t where a=*** and b=***

②最左字首匹配

對於單個的a列,也可以用到(a,b)聯合索引

select * from t where a=***

③不能使用聯合索引

葉子節點上b的值為1,2,1,4,1,2,顯然不是排序的。

select * from t where b=***

同理,如果建立(a,b,c)索引,則下面的查詢都能用到索引。

select * from t where a=*** and b=*** and c=***

select * from t where a=*** and b=***

select * from t where a=***

select * from t where b=*** and c=***

3.聯合索引可對第二個列進行排序處理,減少一次filesort。

在聯合索引(a,b)中,由於a相同的情況下b本來就是排序的,所以下面的查詢能夠用到(a,b)索引,且不需要額外再進行排序。

select * from t where a=*** order by b

同理,如果建立(a,b,c)索引,下面的查詢也能少一次filesort。

select * from t where a=*** and b=*** order by c

select * from t where b=*** order by c

select * from t where a=*** order by b

MySQL聯合索引or MySQL聯合索引命中條件

轉於 首先明確 為什麼要用聯合索引?對於查詢語句 select e.from e where e.e1 1 and e.e3 2 涉及到兩列,這個時候我們一般採用乙個聯合索引 e1,e3 而不用兩個單列索引,這是因為一條查詢語句往往應為mysql優化器的關係只用乙個索引,就算你有兩個索引,他也只用乙...

mysql聯合索引詳解 mysql 聯合索引詳解

聯合索引又叫復合索引。對於復合索引 mysql從左到右的使用索引中的字段,乙個查詢可以只使用索引中的一部份,但只能是最左側部分。例如索引是key index a,b,c 可以支援a a,b a,b,c 3種組合進行查詢,但不支援 b,c進行查詢 當最左側欄位是常量引用時,索引就十分有效。兩個或更多個...

mysql聯合索引技術 mysql 聯合索引詳解

聯合索引又叫復合索引。對於復合索引 mysql從左到右的使用索引中的字段,乙個查詢可以只使用索引中的一部份,但只能是最左側部分。例如索引是key index a,b,c 可以支援a a,b a,b,c 3種組合進行查詢,但不支援 b,c進行查詢 當最左側欄位是常量引用時,索引就十分有效。兩個或更多個...