添加行时:
LEFT JOIN core_records_sales as sales ON DATE(appointments.date) = DATE(sales.date_sold)
对于我的查询,它将脚本运行的时间从大约 8 秒增加到 2-3 分钟。
会有一些数据导致这个问题还是我没有正确实现这个功能?
我需要使用 DATE() 因为我需要它们是同一天,但日期字段是 DATETIME
这几乎肯定是被索引的约会.日期字段的问题。添加 DATE() 函数的使用使其无法使用索引,从而强制进行表扫描。
我之前不得不处理这个问题,我发现解决这个问题的最好方法是有一个单独的列,其中只有日期部分(没有时间),或者将日期和时间存储在两个单独的列中.
我很想听听其他人是否有更好的方法来处理这个问题。
您在日期列上有索引吗?在没有索引的情况下加入需要全表扫描,因此这可能是性能问题的原因。
通过EXPLAIN运行查询,以查看查询优化器为查询计划提供了什么。
这可能是因为您强制对两个表进行全表扫描,而之前您使用索引作为查询的一部分。您需要检查计划(并向我们提供更多细节),因此通过 EXPLAIN 运行它以查看发生了什么。