前天晚上,睡觉前突然想到白天同事优化的一个sql。(头发渐渐消失。。)SQL语句简化下,就是:select * from t_test where dt like concat(curdate(),”%”);表t_test的字段dt是timestamp类型,并且dt上有索引。执行计划如下:
那其实很容易就能想到,like只能用于字符串比较,那mysql肯定要先把dt转换成字符串再去与’2020-08-01%’进行匹配,那结果肯定就是走不上索引。所以,最简单的方法就是改写下sql:select * from t_test where dt >= curdate() and dt < date_add(curdate(),interval 1 day);