之前對於聯合索引有乙個誤區,
假設 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進行查詢 當最左側欄位是常量引用時,索引就十分有效。兩個或更多個...