需要优化TIMESTAMPDIFF查询

时间:2016-08-27 08:21:26

标签: mysql optimization

嗨,我有很长时间的查询,花了将近400毫秒。

这是我的查询

 SELECT id, `from` 
 FROM messages 
 WHERE `to` = ? 
 AND `to_viewed` = '0' 
 AND `to_deleted` = '0'
 AND TIMESTAMPDIFF(SECOND,created,?)< 20 AND TIMESTAMPDIFF(SECOND,created,?)>= 0 

我如何优化这个?

我没有idex。

编辑以显示我的EXPLAIN

  id  select_type  table    type  possible_keys  key  key_len  ref  rows Extra
   1  SIMPLE       messages ALL  created  NULL  NULL  NULL    10   Using where

1 个答案:

答案 0 :(得分:3)

确保created列上有索引。然后使用

AND created BETWEEN ? AND DATE_ADD(?, INTERVAL 20 SECOND);

对列执行计算时,无法使用索引。因此,您应该计算时间范围的结束,然后将列与之比较。