我正在编写这个复杂的查询来返回一个大型数据集,大约100,000条记录。查询运行良好,直到我在这个或语句添加到WHERE子句:优化where语句MYSQL
AND(responses.StrategyFk = strategies.Id或者responses.StrategyFk IS 空)
现在我明白,把这个语句放在那里会增加很多开销。
没有这种说法,只是:
和responses.StrategyFk = strategies.Id
查询在15秒内运行,但不会返回没有一个任何记录fk链接战略。
虽然我也想要这些记录。有一种简单的方法可以用简单的where语句查找两个记录吗?我不能只为空记录添加另一个AND语句,因为这会破坏以前的语句。不确定该从哪里出发。
继承人我的查询的下半部分。
FROM
responses, subtestinstances, students, schools, items,
strategies, subtests
WHERE
subtestinstances.Id = responses.SubtestInstanceFk
AND subtestinstances.StudentFk = students.Id
AND students.SchoolFk = schools.Id
AND responses.ItemFk = items.Id
AND (responses.StrategyFk = strategies.Id Or responses.StrategyFk IS Null)
AND subtests.Id = subtestinstances.SubtestFk
Ahh非常感谢!这效率更高。看起来我应该从现在开始使用这种显式连接的方法。确切地说, – mmSQL
;与其他人一起阅读和理解您要做的事情更容易。 –