2012-04-28 91 views
0

不FROM_UNIXTIME严重影响这样的查询的性能: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 
     ) 

或者我应该没事吧?

回答

2

而不是你的UNIX时间转换为格式化字符串,然后比较这些(如您目前是),您将得到更好的使用UNIX_TIMESTAMP()$date变量转换为UNIX时间,然后比较整数(检查不同的是不超过24小时)。整数比较将始终快于字符串比较:

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

或者,你可能会发现你已经拥有的$date某处您从中调用此查询语言一应俱全UNIX时间戳值:PHP,例如将日期存储为UNIX时间戳。

请注意,您应该是绝对确定$date不能被操纵以包含SQL,如果您以此方式将其插入到查询中;如果有任何疑问,应使用准备好的语句:如果你不知道为什么,或者是什么,了解Bobby Tables

+0

非常有用的答案,但使用UNIX_TIMESTAMP($日期)不会给准确的时间戳我需要比较'task_execution'来,因为日期是Y-M-d的情况下,你没有注意到。 – Dewan159 2012-04-28 12:48:37

+0

ammm,我不知道如果你收到了吗? $ date ='2012-08-08'将其转换为Unix格式=“1344373200”。存储在数据库中的'task_execution'值包含日期和时间,所以两相比较这种方式是完全没有意义的。由于 – Dewan159 2012-04-28 13:00:49

+0

了'task_executionTime'列的数据类型为int – Dewan159 2012-04-28 13:04:38