嗨,我有很长时间的查询,花了将近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
答案 0 :(得分:3)
确保created
列上有索引。然后使用
AND created BETWEEN ? AND DATE_ADD(?, INTERVAL 20 SECOND);
对列执行计算时,无法使用索引。因此,您应该计算时间范围的结束,然后将列与之比较。