![]() | 1 sagaxu 123 天前 都能利用(a,b,c)中的前缀(a,b),如果(a,b)值分布很稀疏,是可以命中索引的,如果(a,b)很稠密,可能会走全表扫描,或者使用 c 索引(如果 C 是稀疏的,且建立了 c 索引或者(c,...)复合索引)。 |
2 Rickkkkkkk 123 天前 ![]() 两个例子都只能命中 a,b ,命中不了 c |
![]() | 3 summerwar 123 天前 建议把索引建立为 a c b 的联合索引,至于有没有命中索引,你直接 EXPLAIN 分析下就能看到。 sql 不熟,但是大体的意思是 and 会被优化成并列的,所以实际的搜索语句是 a=1 c=3 b like b%,所以为了能够用上所有索引字段,建议你把 c 放到 b 前面 |
![]() | 4 BraveXaiver OP @Rickkkkkkk 我也是这么想的 但在一篇文章里看到前者可以后者不可以 所以才提这个帖子 |
5 kg2019 123 天前 索引下推,Explain 看一下是不是 Using index condition |
6 chanchan 123 天前 一般匹配到索引返回多维数据为止 |
7 bbsingao 122 天前 查询 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 是最顶级的 |