0

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
        )

或者我应该没问题??

4

1 回答 1

2

与其将您的 UNIX 时间转换为格式化的字符串,然后比较它们(就像您目前一样),不如使用UNIX_TIMESTAMP()将您的$date变量转换为 UNIX 时间,然后比较整数(检查差异不超过 24 小时) . 整数比较总是比字符串比较快:

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

或者,您可能会发现您已经在$date调用此查询的语言中很容易获得某个位置的 UNIX 时间戳值:例如,PHP 将日期存储为 UNIX 时间戳。

请注意,如果您以这种方式将 SQL 插入到查询中,您应该绝对确定不能$date被操纵以包含 SQL;如果有任何疑问,您应该使用准备好的陈述:如果您不知道原因或它们是什么,请阅读Bobby Tables

于 2012-04-28T12:37:27.180 回答