最近在优化线上库的时候经常会遇到如下一个问题: where a AND b AND c group by d,其中,selectivity是a<b<c<d 如果按复合索引建立规则,也就是,选择性高的置前,那应该建立 idx_1(d,c,b,a) 但事实上,idx_1的效果非常差。反而是,建立idx_1(a,b,c,d)效果出奇的好 MySQL的版本是 5.1 && 5.5
你也认为复合索引的字段顺序要和where条件的顺序一样吗?[/quote]不需要。 但至少 d 必须在最后。 (a,b,c) 按查询的频率,或者不同值分布来决定以提高效率。[/quote]
假设有这么一条query:
select * from t where a and b; 其中,a的cardinality比b的小很多,
此时建立的索引idx_1 (a,b) 比idx_2(b,a)好非常多。
能帮忙解释下吗?