今天群里抛出了个乍看之下很迷的问题:
看到问题的第一瞬间,我想这是什么原理,比较方向的修改就能引起索引失效了?于是我自己先试了一下。
环境:MySQL 5.7.25
1. 创建测试表
我先整了个32万行记录的表test_user,表中仅有两个字段:id和创建时间:
CREATE TABLE `test_memory` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键id',
`create_time` datetime NOT NULL COMMENT '创建时间'
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
复制代码
2. 创建索引
然后针对时间字段create_time加索引ct_index
create index ct_index on test_user(create_time);
复制代码
3. 分析sql
对select * from test_user where create_time > '2007-07-02 13:07:51';进行explain分析,这里的时间2007-07-02 13:07:51只是随便取一个值:
mysql> explain select * from test_user where create_time > '2007-07-02 13:07:51';
+----+-------------+-----------+------------+------+---------------+------+---------+------+--------+----------+-------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-----------+------------+------+---------------+-----