mysqlvarcharint123走索引吗?

结论:
当MySQL中字段为int类型时,搜索条件where num="111" 与where num=111都可以使用该字段的索引。
当MySQL中字段为varchar类型时,搜索条件where num="111" 可以使用索引,where num=111 不可以使用索引
验证过程:
建表语句:
1
2
3
4
5
6
7
8
9
CREATETABLE`gyl` (
  `id` int(11) NOTNULLAUTO_INCREMENT,
  `str` varchar(255) NOTNULL,
  `num` int(11) NOTNULLDEFAULT"0",
  `obj` varchar(255) DEFAULTNULL,
  PRIMARYKEY(`id`),
  KEY`str_x` (`str`),
  KEY`num_x` (`num`)
) ENGINE=InnoDB  DEFAULTCHARSET=utf8;
向表中使用自复制语句插入数据
insert into gyl (`str`,`num`)values(123123,"12313");
insert into gyl (`str`,`num`) select `str`,`num` from gyl;
更改数据 update gyl set num=id,str=id
结果:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
mysql> explain 
select* fromgyl wherestr=123123 limit 1;
+----+-------------+-------+------+---------------+------+---------+------+--------+-------------+
| id | select_type | table| type | possible_keys | key  | key_len | ref  | rows   | Extra       |
+----+-------------+-------+------+---------------+------+---------+------+--------+-------------+
|  1 | SIMPLE      | gyl   | ALL  | str_x         | NULL| NULL    | NULL| 262756 | Using where|
+----+-------------+-------+------+---------------+------+---------+------+--------+-------------+
1 row inset
mysql> explain select* fromgyl wherestr="123123"limit 1;
+----+-------------+-------+------+---------------+-------+---------+-------+--------+-------------+
| id | select_type | table| type | possible_keys | key   | key_len | ref   | rows   | Extra       |
+----+-------------+-------+------+---------------+-------+---------+-------+--------+-------------+
|  1 | SIMPLE      | gyl   | ref  | str_x         | str_x | 257     | const | 131378 | Using where|
+----+-------------+-------+------+---------------+-------+---------+-------+--------+-------------+
1 row inset
mysql> explain select* fromgyl wherenum="12313"limit 1;;
+----+-------------+-------+------+---------------+-------+---------+-------+--------+-------+
| id | select_type | table| type | possible_keys | key   | key_len | ref   | rows   | Extra |
+----+-------------+-------+------+---------------+-------+---------+-------+--------+-------+
|  1 | SIMPLE      | gyl   | ref  | num_x         | num_x | 4       | const | 131378 |       |
+----+-------------+-------+------+---------------+-------+---------+-------+--------+-------+
1 row inset
1065 - Query was empty
mysql> explain select* fromgyl wherenum=12313 limit 1;
+----+-------------+-------+------+---------------+-------+---------+-------+--------+-------+
| id | select_type | table| type | possible_keys | key   | key_len | ref   | rows   | Extra |
+----+-------------+-------+------+---------------+-------+---------+-------+--------+-------+
|  1 | SIMPLE      | gyl   | ref  | num_x         | num_x | 4       | const | 131378 |       |
+----+-------------+-------+------+---------------+-------+---------+-------+--------+-------+
1 row inset
字段类型不同造成的隐式转换,导致索引失效
以上是 mysqlvarcharint123走索引吗? 的全部内容, 来源链接: utcz.com/z/532742.html








