嗨,我的查询时间很少,几乎需要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


我该如何优化呢?

obs我没有想法。

编辑以显示我的解释

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

最佳答案

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

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


在列上执行计算时,不能使用索引。因此,您应该计算时间范围的终点,然后将其与该范围进行比较。

09-11 19:36
查看更多