2009-11-19 56 views
3

当添加一行:运行在LEFT出奇的慢MYSQL DATE函数JOIN

LEFT JOIN core_records_sales as sales ON DATE(appointments.date) = DATE(sales.date_sold) 

为了我的查询,它能增强时间脚本从约8秒运行,2-3分钟。

会有一些数据导致这个问题,或者我没有正确实现该功能?

我需要,因为我需要他们在同一天,但日期字段是DATETIME

+0

每个表中有多少行以及哪些列被索引? – Cruachan 2009-11-19 18:53:24

回答

2

这几乎可以肯定是约会的约会问题。添加DATE()函数的使用使得不能使用索引,强制进行表扫描。

以前我不得不面对这个问题,而我发现解决问题的最好方法是在其中只有日期部分(没有时间)的单独列或存储日期和时间在两个单独的列中。

我很想听听别人是否有更好的处理方式。

+0

不幸的是可能要走这条路。谢谢! – kilrizzy 2009-11-19 19:55:57

1

你有日期列的索引使用DATE()?加入没有索引需要全表扫描,所以这可能是性能问题的原因。

通过EXPLAIN运行查询以查看查询优化器为查询计划提供的内容。

+0

看到OP的底层列是DATETIME,索引不会真的有帮助。 – ChssPly76 2009-11-19 18:55:44

0

这可能是因为你在两个表上强制进行全表扫描,而之前你在使用索引作为查询的一部分。您需要检查计划(并提供更多详细信息),请通过EXPLAIN运行以查看发生了什么。