我正在尝试优化一些涉及比较日期的查询。这是在PHP中完成的。目前,WHERE语句的设置如下:
WHERE
search_deals_online.expirationDate > DATE_ADD( CURDATE( ) , INTERVAL -1 DAY ) AND
search_deals_online.createDate > DATE_ADD( CURDATE( ) , INTERVAL -30 DAY )
然而,这似乎必须计算每一行的日期(约250k)。是否值得通过PHP硬编码日期,所以它看起来像:
WHERE
search_deals_online.expirationDate > '2014-11-12' AND
search_deals_online.createDate > '2014-10-13'
答案 0 :(得分:0)
如果您发现需要经常进行此查询,则应考虑覆盖相关日期列的索引。另外,请确保您在表格上有PRIMARY KEY
或UNIQUE NOT NULL
字段,这有助于编制索引。
然后,只需确保每个表达式的一侧是字段名称。例如,始终使用search_deals_online.expirationDate > DATE_ADD( CURDATE() , INTERVAL -1 DAY )
而不是DATEDIFF(search_deals_online.expirationDate, CURDATE()) > 1
。函数内的字段不是SARGable,并且不会利用索引。