我目前有以下查询;
SELECT a.schedID,
a.start AS eventDate, b.div_id AS divisionID, b.div_name AS divisionName
FROM schedules a
INNER JOIN divisions b ON b.div_id = a.div_id
WHERE date_format(a.start, '%Y-%m-%d') >= '2010-01-01'
AND DATE_ADD(a.start, INTERVAL 5 DAY) <= CURDATE()
AND NOT EXISTS (SELECT results_id FROM results e WHERE e.schedID = a.schedID)
ORDER BY eventDate ASC;
我试图基本上找到在计划日期后 5 天没有任何结果的任何计划。我当前的查询存在重大性能问题。它也会不一致地超时。有没有不同的方式来编写查询?我在心理障碍。感谢您的帮助。
最佳答案
在没有对结果有太多期待的情况下,我会建议以下线索: * 尝试删除 date_format,因为这会为每条记录生成一个函数调用。我不知道你的专栏 a.start 的格式,但这应该是可能的。 * 与 DATE_ADD 相同,您可以将它放在其他成员上,例如:
a.start <= DATE_SUB(CURDATE(), INTERVAL 5 DAYS)
您有机会缓存结果而不是为每一行计算结果,您甚至可以预先将其定义为参数 * NOT EXISTS 非常昂贵,在我看来你可以用左连接代替它,比如:
schedules a LEFT JOIN results e ON a.schedId = e.schedId WHERE e.schedId is NULL
- 仔细检查所有连接字段是否已正确编入索引。
祝你好运
关于mysql - 试图更正 mysql 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7820982/