5.6中使用字符串存放时间,导致隐式转换发生的记录

CREATE TABLE `test_date` (

  `id` int(11) DEFAULT NULL,

  `gmt_create` varchar(100) DEFAULT NULL,

  KEY `ind_gmt_create` (`gmt_create`)

) ENGINE=InnoDB AUTO_INCREMENT=524272;

5.5:

mysql> explain  select * from test_date where gmt_create BETWEEN DATE_ADD(NOW(), INTERVAL - 1 MINUTE) AND        DATE_ADD(NOW(), INTERVAL 15 MINUTE) ;

+----+-------------+-----------+-------+----------------+----------------+---------+------+------+-------------+

| id | select_type | table     | type  | possible_keys  | key            | key_len | ref  | rows | Extra       |

+----+-------------+-----------+-------+----------------+----------------+---------+------+------+-------------+

|  1 | SIMPLE      | test_date | range | ind_gmt_create | ind_gmt_create | 303     | NULL |    1 | Using where |

5.6:

mysql> explain select * from test_date where gmt_create BETWEEN DATE_ADD(NOW(), INTERVAL - 1 MINUTE) AND        DATE_ADD(NOW(), INTERVAL 15 MINUTE) ; 

+----+-------------+-----------+------+----------------+------+---------+------+---------+-------------+

| id | select_type | table     | type | possible_keys  | key  | key_len | ref  | rows    | Extra       |

+----+-------------+-----------+------+----------------+------+---------+------+---------+-------------+

|  1 | SIMPLE      | test_date | ALL  | ind_gmt_create | NULL | NULL    | NULL | 2849555 | Using where |

+----+-------------+-----------+------+----------------+------+---------+------+---------+-------------+

| Warning | 1739 | Cannot use range access on index 'ind_gmt_create' due to type or collation conversion on field 'gmt_create'      

原文地址:https://www.cnblogs.com/yuyue2014/p/5195263.html