mysql的聯合索引的誤解

2022-03-10 22:33:49 字數 621 閱讀 9309

之前對於聯合索引有乙個誤區,

假設 name,age為乙個聯合索引

5條索引記錄

a 10

b 5c 12

c 15

d 2 

當查詢 where name='a' and age=10的時候能利用這個聯合索引,為什麼 where name>'a' and age=5 就只能使用到聯合索引的部分索引,指第乙個索引呢?

其實還是對聯合索引的性質不熟悉,網上找了資料

mysql建立復合索引的規則是首先會對復合索引的最左邊的,也就是第乙個name欄位的資料進行排序,在第乙個欄位的排序基礎上(第乙個欄位都相同),然後再對後面第二個的cid欄位進行排序。其實就相當於實現了類似 order by name cid這樣一種排序規則。

由於是name>'a' 所以使用聯合索引的第乙個索引, 留下記錄

b 5c 12

c 15

d 2針對第二列無法使用二分查詢啊,

如果是name='c' and age=15 或 name='c' and age>15 沒問題 name 為12的那兩行記錄 是有序的

這也就是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進行查詢 當最左側欄位是常量引用時,索引就十分有效。兩個或更多個...

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

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