现在有个 mysql 索引问题,表有三个字端:a ,b ,c 表中有三个索引 index ( a,b ), index(b,c),index ( a,c ) 现有查询 where a = ‘1’ and b = ‘1’ and c = ‘1’ 请问哪些字端用到了索引,用到了哪些索引?为什么? 请教大佬解惑
![]() |
1
cheng6563 141 天前 ![]() 索引只会用一个,这种情况猜就是 index ( a,b )咯
|
2
jtwor 141 天前 ![]() 索引最左匹配原则
|
4
bootvue 141 天前 ![]() 一切皆有可能
|
![]() |
5
fiypig 141 天前 ![]() 建个 a b c 在建个 a c 是不是比较好
|
![]() |
6
RedisMasterNode 141 天前 ![]() 我再帮楼主细化一下问题以便于分类讨论。
现在有个 mysql 索引问题,表有三个字段:a ,b ,c ,共计 1000w 行数据。表中有三个索引 index(a,b), index(b,c),index(a,c)。现有查询 where a = 1 and b = 1 and c = 1 。 场景 1: 满足 a=1 and b=1 的数据有 999w 行,满足 b=1 and c=1 的数据有 999w 行,满足 a=1 and c=1 的数据有 100 行。 场景 2: 满足 a=1 and b=1 的数据有 999w 行,满足 b=1 and c=1 的数据有 999w 行,满足 a=1 and c=1 的数据有 999w 行。 场景 3: 满足 a=1 and b=1 的数据有 1 行,满足 b=1 and c=1 的数据有 1 行,满足 a=1 and c=1 的数据有 1 行。 场景 4: 满足 a=1 and b=1 的数据有 1000 行,满足 b=1 and c=1 的数据有 50 行,满足 a=1 and c=1 的数据有 10 行。 请问哪些字端用到了索引,用到了哪些索引?为什么? 请教大佬解惑 -------------------------------------- 我认为的答案: 场景 1: 极大概率使用 index(a,c) 场景 2: 执行全表扫描 场景 3: 所有索引均有使用可能 场景 4: 所有索引均有使用可能 |
![]() |
7
0littleboy 141 天前 ![]() a,b
|
8
optional 141 天前 via iPhone ![]() 其实用哪个跟你后面还有没有 order by 关系很大,没有的话你这个例子用哪个都有可能
|
9
optional 141 天前 via iPhone ![]() 对了,还有 select
|
![]() |
10
4lieS 141 天前 ![]() 盲猜会根据 a b c 三个字段区分度决定走哪个索引
|
11
demonps 141 天前 ![]() 搞几张表 explain 一下各种情况:(
|
![]() |
12
oldshensheep 141 天前 via iPhone ![]() where a = ‘1’ and b = ‘1’ and c = ‘1’
其中 a = ‘1’ ,b = ‘1’ ,c = ‘1’ 这几个条件是可以随意排列组合的,是等价的。所以都有可能。 除非 MySQL 数据库太菜了。 |
13
morty0 141 天前 ![]() 取决于哪个索引的区分度更高, 跟存量数据和查询值有关
|