2012-04-28 28 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