mysql - 试图更正 mysql 查询

标签 mysql

我目前有以下查询;

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/

相关文章:

c# - 如何防止'字符被输入到文本框中?

MySQL:如何在触发器中设置默认用户

mysql - 将非 utf8 数据库转换为 utf-8

MySQL 检查一个值是否在从子查询派生的值范围内

mysql - SQL 条件插入或更新语句取决于一对列。使用唯一索引?

mysql - sql查询减号运算

mysql - 分组依据未正确按日期排序

php - 尝试更新 MySQL 中的行时,bindParam 错误

mysql - Yii2:如何从不同表中选择多个字段

php - MySQL:更新两个表(如果电子邮件在两个表中)