聯合索引區分順序

2022-09-09 08:03:10 字數 616 閱讀 7358

select * from t where b > 5, c <3, a = 4

建立聯合索引a,b,c和建立聯合索引b,c,a有區別嗎?

答案是有的。

如果建立時間放在第一位,不會走索引。

(由於這一天是壓測,建立時間都集中在那一天。)

如果status放第一位,會走索引。

因為聯合索引是根據順序來排序的,先搜尋a,再搜尋b,再搜尋c,如果搜尋a的時候,還有很多資料沒有過濾,他就會直接走全表掃瞄。

如上圖,如果根據再建立時間過濾,會搜出來很多資料,,而status為1的資料可能只有幾條。

所以能根據索引篩選掉很多資料的字段一定要放在前面。

後續:領導說如果status放在第一位有可能會導致插入和更新頻繁修改索引。我測試了一下,900萬條資料插入1條資料的速度在0.01秒左右,create_time放在前面和status放在前面都是差不多的時間。不過最好還是把離散度高的索引放在第一位比較穩妥。

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