【问题标题】:MYSQL DATE function running insanely slow in LEFT JOINMYSQL DATE 函数在 LEFT JOIN 中运行异常缓慢
【发布时间】:2010-12-18 10:48:30
【问题描述】:

添加行时:

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

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

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

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

【问题讨论】:

  • 每个表有多少行,哪些列被索引?

标签: php mysql datetime left-join


【解决方案1】:

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

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

【讨论】:

  • 看到 OP 的底层列是 DATETIME,索引并没有真正的帮助。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

    • 不幸的是,可能不得不走这条路。谢谢!
    猜你喜欢
    • 2012-12-23
    • 1970-01-01
    • 1970-01-01
    • 2012-06-26
    • 1970-01-01
    • 2012-10-25
    • 2018-04-02
    • 2022-01-19
    • 2017-05-30
    相关资源
    最近更新 更多