我有一个表 a,里面有 6 条数据,id 是主键,当我用
id in (1,2,3)
这时候查看 explain 发现 type 是 range,key 是 primary。当我用
id in (1,2,3,4)
这时候 type 是 all
想问一下,为什么会发生这样的情况
1
linjiayu 2019-09-26 16:20:59 +08:00
数据量超过百分之几,应该是 33%,不过看样子不是
|
2
arrow8899 2019-09-26 17:20:48 +08:00
你要把整个 sql 发出来,计算查询成本涉及到很多因素;
你可以用 `EXPLAIN FORMAT=JSON 你的 sql 语句` 查看更详细的信息,主要关注 cost 字段 |
3
InternetExplorer 2019-09-26 17:24:08 +08:00
数据很少的时候 mysql 会自己选择扫表还是用索引
|
4
Dogergo 2019-09-26 17:57:04 +08:00
mysql 觉得全表扫描的代价更低。
|
5
optional 2019-09-26 18:06:32 +08:00
虽然没看过源码,但是可以猜测下,mysql 会判断如果走索引会扫描几个 page,
如果 page < n 就会走索引 |
6
Aresxue 2019-09-29 09:43:05 +08:00
eq_range_index_dive_limit
|