MySQL sysdate()无法使用索引

背景

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()

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • ORACLE自学教程 --create tabletestone ( id number, --序号usernam...
    落叶寂聊阅读 4,839评论 0 0
  • 一、MySQL 获得当前日期时间 函数 1.1 获得当前日期 + 时间(date + time) 函数:now()...
    梦遇缱绻的馥郁阅读 4,369评论 0 1
  • 什么是数据库? 数据库是存储数据的集合的单独的应用程序。每个数据库具有一个或多个不同的API,用于创建,访问,管理...
    chen_000阅读 9,478评论 0 19
  • MySQL技术内幕:SQL编程 姜承尧 第1章 SQL编程 >> B是由MySQL创始人之一Monty分支的一个版...
    沉默剑士阅读 7,292评论 0 3
  • 索引 数据库中的查询操作非常普遍,索引就是提升查找速度的一种手段 索引的类型 从数据结构角度分 1.B+索引:传统...
    一凡呀阅读 8,235评论 0 8

友情链接更多精彩内容