MySQL时间查询不走索引,MySQL带时间字段的范围查询不走索引了?

本文探讨了一个关于MySQL时间查询不走索引的问题。通过实验发现,当查询条件涉及的时间范围超过表中数据的一定比例时,MySQL的查询优化器可能会选择全表扫描而非使用索引。这一行为并非由时间字段类型导致,而是优化器根据表大小、行数等多因素判断的结果。
摘要由CSDN通过智能技术生成

今天群里抛出了个乍看之下很迷的问题:

72e04c2421acc369bce76d6417b75ff5.png

a0b1bf245063d8fa557c605788a22943.png

看到问题的第一瞬间,我想这是什么原理,比较方向的修改就能引起索引失效了?于是我自己先试了一下。

环境: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 |

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值