SendTime为TIMESTAMP类型,建立有索引A、select * from data where SendTime<UNIX_TIMESTAMP();
B、select * from data where SendTime<now();A句中,它和时间戳比较返回错误的结果,使用explain查看可以使用索引
B句中,它和一个时间字符串比较能够返回正确的结果,但使用explain查看,不能使用索引

解决方案 »

  1.   

    timestamp 数据类型与时间和日期无关。timestamp 是二进制数字,它表明数据库中数据修改发生的相对顺序。
      

  2.   

    MySQL中存储的timestamp就是一个日期吧,手册中有这么一句:时间戳,范围是'1970-01-01 00:00:00'到2037年。
      

  3.   

    问题已解决
    B语句是正确的,A语句中将timestamp输入时,MYSQL会强制转换成日期类型,出现转换错误,所以查询结果是不正确的
    只所有没有使用索引,是MYSQL的自动优化功能在起作用,当MYSQL发现使用索引导致速度更慢时会放弃使用索引。