![]() |
1
sagaxu 7 天前
都能利用(a,b,c)中的前缀(a,b),如果(a,b)值分布很稀疏,是可以命中索引的,如果(a,b)很稠密,可能会走全表扫描,或者使用 c 索引(如果 C 是稀疏的,且建立了 c 索引或者(c,...)复合索引)。
|
2
Rickkkkkkk 6 天前 ![]() 两个例子都只能命中 a,b ,命中不了 c
|
![]() |
3
summerwar 6 天前
建议把索引建立为 a c b 的联合索引,至于有没有命中索引,你直接 EXPLAIN 分析下就能看到。
sql 不熟,但是大体的意思是 and 会被优化成并列的,所以实际的搜索语句是 a=1 c=3 b like b%,所以为了能够用上所有索引字段,建议你把 c 放到 b 前面 |
![]() |
4
BraveXaiver OP @Rickkkkkkk 我也是这么想的 但在一篇文章里看到前者可以后者不可以 所以才提这个帖子
|
5
kg2019 6 天前
索引下推,Explain 看一下是不是 Using index condition
|
6
chanchan 6 天前
一般匹配到索引返回多维数据为止
|
7
bbsingao 6 天前
查询 1:WHERE a=1 AND b LIKE 'b%' AND c=3
完全命中复合索引 (a, b, c),因为所有条件 (= 和前缀 LIKE) 按索引列顺序使用,且操作类型索引友好。 查询 2:WHERE a=1 AND b > 2 AND c=3 部分命中复合索引 (a, b, c),通常只利用到 (a, b) 部分,因为 b > 2 是范围查询,可能中断索引后续列 (c) 的使用。 话说现在这种问题都没必要论坛提问了,AI 都是最顶级的 |