MySQL查询运行很长时间将datetime转换为date

时间:2013-07-28 04:28:36

标签: mysql sql

我有一个相当优化的查询。但是,当我添加此连接时,它会将查询增加70秒。我能看到的最大问题是我必须根据相同的日期比较两个日期时间。换句话说,2013-01-01 8:37 am必须加入到2013-01-01 9:01 am。所以,我首先将两者都转换为日期,然后我将它们进行比较。

在没有修改表格的情况下,有更快的方法吗?我已经为下面连接中的所有字段添加了索引。

LEFT JOIN ins ON 
DATE(ins.ins_date) = DATE(r.date) 

更新:结束尝试一些不同的技巧,例如从日期减去几个小时并直接比较日期将至少利用一个索引,并且为联接添加更多条件有助于减少它尝试的记录执行DATE()操作。我相信下面的海报也有一个有效的建议,即为该日期创建一个单独的字段,但我不能修改此案例的表格,但我可能会在将来尝试这个。

1 个答案:

答案 0 :(得分:1)

在您向我们展示的连接语句中,您正在将日期时间(转换为普通日期)转换为比较它。这意味着数据库引擎必须检查表中的每个 * single * 记录,看它们是否符合您所追求的标准。即使您在ins_date上有索引,引擎也无法使用它来查找您所追踪的记录。

查看您是否可以重新设计查询以使用native形式的列(即不对它们应用任何转换)。如果必须对列进行某种转换以进行连接或过滤,请尝试仅对该连接中最小的表执行此操作,以减少必须检索和转换的记录数。

如果可以,并且这是一个仅偶尔运行的查询,请查看是否可以重新定义您正在使用的列而不是DATETIME类型。如果您需要应用程序中DATETIME值的时间部分,那么看看是否可以仅使用该DateTime值的DATE部分维护ghost DATE列(这可以通过插入查询或触发器维护)。