Mysql时间函数
-
函数1: NOW()
-
函数2: SYSDATE()
大家看下测试 示例
-
正常大家执行时间函数【看起来没啥问题吧】
-
执行第二段代码【这里代码认为 sleep休息5】大家会发现前后时间不一样,
- 对于now函数来讲 返回值都是执行这条SQL语句的时间,无论你整条语句有多么复杂
- 但是sysdata 返回则是执行到当前sysdate函数时系统的时间【sleep 5秒就相差5秒】
-
当我们执行SQL语句 where 条件有索引时
这里是引用突然发现SYSDATE 居然没有索引
网上搜索查询 说使用SYSDATE 对应的列不会使用索引, 其实并不然 只是使用SYSDATE 完全不会使用索引,只是在某些情况下会使其他元素不适用的索引,我们称之为 优化器摇摆,【具体还要深究】
还有一个就是在集群的情况下使用 SYSDATE 会出现 sysdate is replication unsafe ,原因是使用sysdate会导致主从最终结果不一致,但是有个前提是LEX 声明 BINLOG 结构为 STMT时才会导致 replication unsafe
总的来说 个人觉得没事就少使用 SYSDATE() 避免挖坑