这种情况下mysql为什么不使用索引呢?

问题描述 投票:0回答:1

1 创建表tb1

create table tb1 (t1 int not null, t2 varchar(20) not null);

2.为 t1、t2 添加索引

CREATE  INDEX index_t1 ON tb1(t1);
CREATE  INDEX index_t2 ON tb1(t2);

3.使用解释测试索引

3.1 解释 select * from tb1 where t1 = 1\G

enter image description here

3.2 解释 select * from tb1 where t1 = '1'\G

enter image description here

3.3 解释 select * from tb1 where t2 = '1'\G

enter image description here

3.4 解释 select * from tb1 where t2 = 1\G

enter image description here

  • t1 是 int,1 是 int,所以 3.1 可以使用索引
  • t1 是 int,'1' 是字符串,但 3.2 也可以使用索引
  • t2 是字符串,'1' 是字符串,所以 3.3 可以使用索引
  • t2 是字符串,1 是整数,3.4 无法使用索引

为什么3.1可以使用索引,3.4不能。

mysql
1个回答
0
投票

有几个字符串可以转换为给定值。除此之外,MySQL 会将任何不以数值开头的字符串转换为 0。因此,当将字符串列与数字进行比较时,MySQL 无法使用索引。 MySQL 文档对此进行了解释。

© www.soinside.com 2019 - 2024. All rights reserved.