1. MySQL 查询 where 字段和值类型不一致不走索引问题排查
1.1. 准备
创建一张表,包含varchar
、char
和int
类型字段,每个字段加上索引。
| create table `t_demo` |
| ( |
| `id` int(11) not null auto_increment, |
| `varchar_field` varchar(1) not null, |
| `char_field` char(1) not null, |
| `int_field` int(1) not null, |
| primary key (`id`), |
| index (`varchar_field`), |
| index (`char_field`), |
| index (`int_field`) |
| ); |
1.2. 测试 where 字段在不同值类型情况下索引表现
1.2.1. 测试一、varchar 字段数值类型值
| EXPLAIN SELECT * FROM t_demo WHERE varchar_field=1; |
id |
select_type |
table |
partitions |
type |
possible_keys |
key |
key_len |
ref |
rows |
filtered |
Extra |
1 |
SIMPLE |
t_demo |
null |
ALL |
varchar_field |
null |
null |
null |
1 |
100 |
Using where |
结果:不走索引。
1.2.2. 测试二、varchar 字段字符串值
| EXPLAIN SELECT * FROM t_demo WHERE varchar_field='1'; |
id |
select_type |
table |
partitions |
type |
possible_keys |
key |
key_len |
ref |
rows |
filtered |
Extra |
1 |
SIMPLE |
t_demo |
null |
ref |
varchar_field |
varchar_field |
5 |
const |
1 |
100 |
null |
结果:走索引。
1.2.3. 测试三、char 字段数值类型值
| EXPLAIN SELECT * FROM t_demo WHERE char_field=1; |
id |
select_type |
table |
partitions |
type |
possible_keys |
key |
key_len |
ref |
rows |
filtered |
Extra |
1 |
SIMPLE |
t_demo |
null |
ALL |
char_field |
null |
null |
null |
1 |
100 |
Using where |
结果:不走索引。
1.2.4. 测试四、char 字段字符串值
| EXPLAIN SELECT * FROM t_demo WHERE char_field='1'; |
id |
select_type |
table |
partitions |
type |
possible_keys |
key |
key_len |
ref |
rows |
filtered |
Extra |
1 |
SIMPLE |
t_demo |
null |
ref |
char_field |
char_field |
3 |
const |
1 |
100 |
null |
结果:走索引。
1.2.5. 测试五、int 字段字符串值
| EXPLAIN SELECT * FROM t_demo WHERE int_field='1'; |
id |
select_type |
table |
partitions |
type |
possible_keys |
key |
key_len |
ref |
rows |
filtered |
Extra |
1 |
SIMPLE |
t_demo |
null |
ref |
int_field |
int_field |
4 |
const |
1 |
100 |
null |
结果:走索引。
1.2.6. 测试六、int 字段数值类型值
| EXPLAIN SELECT * FROM t_demo WHERE int_field=1; |
id |
select_type |
table |
partitions |
type |
possible_keys |
key |
key_len |
ref |
rows |
filtered |
Extra |
1 |
SIMPLE |
t_demo |
null |
ref |
int_field |
int_field |
4 |
const |
1 |
100 |
null |
结果:走索引。
1.3. 总结
字段类型 |
值类型 |
是否走索引 |
varchar |
数值 |
否 |
varchar |
字符串 |
是 |
char |
数值 |
否 |
char |
字符串 |
是 |
int |
数值 |
是 |
int |
字符串 |
是 |
where 查询条件字段类型应该和值类型保持一致,否则可能不走索引。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)