FROM_UNIXTIME和性能

时间:2012-04-28 12:21:09

标签: mysql

FROM_UNIXTIME会严重影响这样的查询的性能:

        (
            (calltasks.task_dueDate = '".$date."') # Tasks of this date
            OR 
            (calltasks.task_dueDate < '".$date."' AND calltasks.task_status = 'scheduled') # Tasks still available on this date
            OR 
            (FROM_UNIXTIME(calltasks.task_executionTime, '%Y-%m-%d') = '".$date."') # Tasks finished this date
        )

或者我应该没事呢?

1 个答案:

答案 0 :(得分:2)

不是将UNIX时间转换为格式化字符串,而是比较那些(就像您现在的那样),最好使用UNIX_TIMESTAMP()$date变量转换为UNIX时间,然后再比较整数(检查差异不超过24小时)。整数比较总是比字符串比较快:

(calltasks.task_executionTime - UNIX_TIMESTAMP('$date')) BETWEEN 0 AND 86400

或者,您可能会发现在您调用此查询的语言中,您已经在某个地方提供了$date的UNIX时间戳值:例如,PHP将日期存储为UNIX时间戳。

请注意,如果以这种方式将$date插入到查询中,则{em} <} 如果有任何疑问,你应该使用准备好的声明:如果你不知道为什么或它们是什么,请阅读Bobby Tables