3

添加行时:

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

对于我的查询,它将脚本运行的时间从大约 8 秒增加到 2-3 分钟。

会有一些数据导致这个问题还是我没有正确实现这个功能?

我需要使用 DATE() 因为我需要它们是同一天,但日期字段是 DATETIME

4

3 回答 3

2

这几乎肯定是被索引的约会.日期字段的问题。添加 DATE() 函数的使用使其无法使用索引,从而强制进行表扫描。

我之前不得不处理这个问题,我发现解决这个问题的最好方法是有一个单独的列,其中只有日期部分(没有时间),或者将日期和时间存储在两个单独的列中.

我很想听听其他人是否有更好的方法来处理这个问题。

于 2009-11-19T19:01:39.220 回答
1

您在日期列上有索引吗?在没有索引的情况下加入需要全表扫描,因此这可能是性能问题的原因。

通过EXPLAIN运行查询,以查看查询优化器为查询计划提供了什么。

于 2009-11-19T18:54:00.297 回答
0

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

于 2009-11-19T18:55:22.553 回答