explain
SELECT COUNT(*) AS Count, CreatedBy
FROM `Notes`
INNER JOIN Users ON UserID = CreatedBy
INNER JOIN UserRoles ON URoleID = RoleID AND RoleID = 1
WHERE NoteVisible = 1 AND NoteText NOT LIKE '%SOME KEYWORD%'
AND Created BETWEEN '2014-02-24 00:00:00' AND '2014-02-24 23:59:59'
GROUP BY CreatedBy
正如你所看到的,ref是空的,需要遍历23行,而不是只遍历1行。对于这个例子来说,这样做很快,但当我进行1-2个月的范围时,行数变成>10000,它会使页面变慢并且锁定表格。
注意:如果我删除00:00:00和23:59:59,那么它将使用索引,只遍历1行,但我需要选择整天从00:00开始到23:59结束的所有数据。
请帮助我重构此查询以解决此问题或提出任何可能的解决方案。谢谢。
编辑:
用<或>或<=或>=替换BETWEEN并不能解决问题。
BETWEEN
替换为('2014-02-24' <= Created AND Created < '2014-02-25')
,会发生什么? - vadchenNoteVisible
属于Notes
吗? - krokodilko