zoukankan      html  css  js  c++  java
  • mysql varchar int 123 走索引吗?

    结论:

    当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
    CREATE TABLE `gyl` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `str` varchar(255) NOT NULL,
      `num` int(11) NOT NULL DEFAULT '0',
      `obj` varchar(255) DEFAULT NULL,
      PRIMARY KEY (`id`),
      KEY `str_x` (`str`),
      KEY `num_x` (`num`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=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 * from gyl where str=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 in set
    mysql> explain select * from gyl where str='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 in set
     
    mysql> explain select * from gyl where num='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 in set
     
    1065 - Query was empty
    mysql> explain select * from gyl where num=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 in set

    字段类型不同造成的隐式转换,导致索引失效

  • 相关阅读:
    树状数组入门讲解
    注册鼠标右键
    马踏棋盘问题
    先有鸡还是先有蛋
    使用Python-OpenCV向图片添加噪声(高斯噪声、椒盐噪声)
    灰值形态学中的腐蚀与膨胀
    Python-OpenCV——Morphological Transformations(形态学转换)
    Python-OpenCV——Image inverting
    Python-OpenCV中的cv2.inpaint()函数
    UML类图几种关系的总结
  • 原文地址:https://www.cnblogs.com/yangzailu/p/12526431.html
Copyright © 2011-2022 走看看