背景
MySQL 有两个获取当前时间的函数now()和sysdate(),两者的区别是
同一SQL now() 两次执行前后时间不变,而sysdate() 会发生变化

image.png
- 创建表结构
CREATE TABLE `t_sys` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`dt` datetime DEFAULT NULL,
`ag` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_dt` (`dt`)
) ENGINE=InnoDB;
- 使用 now() 函数能够走到索引

image.png
但是sysdate() 函数无法走到

image.png
原因
sysdate() 只有在SQL语句执行时才能得到一个常量,所以MySQL优化器认为它是不确定的值而无法走到索引。
解决办法是:使用now()函数或者 给dt字段再加一个now()的条件,如< sysdate() and > now()