这两天在优化MySQL数据库,分析慢SQL时发现有一个查询明明已经建了索引,但Explain时并没有用到,网上查的原因都不适用,试验发现和查询结果数量有关。
测试表:tablea,共有10000条记录
索引字段:userid,int类型
userid不同值的记录数量:
userid | 数量 |
1 | 25 |
2 | 9975 |
userid取不同值时情况不一样
EXPLAIN SELECT * FROM tablea WHERE userid=1
id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
1 | SIMPLE | tablea | (NULL) | ref | userid | userid | 4 | const | 20 | 100.00 | (NULL) |
EXPLAIN SELECT * FROM tablea WHERE userid=2
id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
1 | SIMPLE | tablea | (NULL) | ALL | userid | (NULL) | (NULL) | (NULL) | 10161 | 98.17 | Using where |
我们都是阴沟里的虫子,但总得有人仰望星空。