有条SQL a=xx and b>xx and b<xxx,b字段的选择性高,a字段选择性不高,那么建索引该怎么建立
我感觉(a,b)这样比较合适点
将等值查询的 a放在最左,可以快速定位到a=xx的所有数据行,(a,b)是最优了
是的,感觉还是(a,b)是最优的
a,b , 然后筛选的字段排序的字段都加上
我觉得(b,a)索引就比较好
那就直接(a,b)就行了
为什么 (a,b) 是合理索引
数据库索引遵循一个经典规则:
等值列在前
范围列在后
所以:
(a,b)
索引结构(B+Tree)会变成:
a → b → rowid
执行流程:
1 定位 a = ?
2 在该 a 的范围内
3 按 b 做范围扫描
扫描范围:
a = const
AND b between x and y
这样扫描的数据量会明显减少。
1 个赞
一般推荐:
INDEX(a, b)
原因:
联合索引遵循最左前缀原则
执行顺序是:
a = xx → 精确定位
b range → 在 a 的范围内扫描
1 个赞
是的,数据库都是优先按等值条件来定位的