
如图,为什么 Expain 执行计划没走索引嗯?
MYSQL VEISION: 5.7.21-21-log Percona Server (GPL), Release 21, Revision 2a37e4e

如图,为什么 Expain 执行计划没走索引嗯?
MYSQL VEISION: 5.7.21-21-log Percona Server (GPL), Release 21, Revision 2a37e4e
|
hboliveMar 13, 2020
1
可能 mysql 认为,就这几条数据,还是全表扫描来得快?
|
|
b821025551bMar 13, 2020
2
你这数据量太少了,怼进去几十万条数据再说。
|
|
falsemaskMar 13, 2020
3
1L+1,有可能,走索引查还需要回表查所有字段,mysql 选择了全表扫描,你试试 select name, age
|
|
4
@hbolive 还有这个说法嘛?大佬
|
|
braderMar 13, 2020
5
mysql 的查询优化器,会预估多种查询方式的成本,来生成最佳的查询计划,如果某个字段的辨识度不高,那么 mysql 优化器进行采样预估的时候,可能会认为使用索引的成本较高(采样失误可能原因:基数太小、采样小概率采集到一样的)转而进行全表扫描
|
|
gz911122Mar 13, 2020
6
@leorealman 有
|
|
stabcMar 13, 2020
7
先执行
·SELECT SQL_NO_CACHE * FROM TABLE· |
|
zzmxMar 13, 2020
8
mysql trace 了解一下。5 楼说的比较详细,应该就是这样了
|
|
huigeerMar 13, 2020
9
name 和 age 的联合索引走一波试试
|
|
lis66951735Mar 13, 2020
10
涨知识了
|
|
ylsc633Mar 13, 2020
11
优化器觉得 你这数据这么少 扫全表都比 索引来的快! 就不走索引了!
相反! 比如你查询的数据是个范围!数量比较多,开始时候 可能走索引,范围越来越大,那么 很可能也就不走索引了! |
|
enorthMar 13, 2020
12
个人觉得是 select * 的缘故,用 覆盖索引 select name,age 就会走索引了
|
|
enorthMar 13, 2020
13
试了下,自己错了。应该是 5 楼的原因。
|
|
encroMar 14, 2020
14
大于总数一半,不走索引。
如一个表里面有 status 这个字段,status=1 绝大部分,status=0 少部分,那么 where status=1 不走,status=0 走索引 |