[MySQL优化案例]系列 -- 带函数的查询条件

mysql>explain select * from tbl_name where date_format(EndTime, '%Y-%m-%d') >= '2007-08-08' AND
 date_format(EndTime, '%Y-%m-%d') set @dt='2007-08-08' ; set @dt1 = '2007-08-09';

mysql>explain select * from tbl_name where EndTime >= @dt AND EndTime 

前面是全表扫描(1012465条记录),而后面则只检索5054条记录而已。

技术相关:

评论

EndTime是什么类型?如果是datetime,好像索引不稳定

重点不在endtime的类型,而是尽管endtime有索引,但是由于第一次查询时,endtime是利用函数进行转换了,因而无法使用索引来检索。

MySQL方案、培训、支持