我正在编写一个复杂的查询以返回一个大数据集,大约有100,000条记录。查询在添加以下OR语句到WHERE子句之前运行良好:
AND (responses.StrategyFk = strategies.Id Or responses.StrategyFk IS Null)
现在我了解到,通过加入这个OR语句会增加很多开销。
如果没有这个语句,只有:
AND responses.StrategyFk = strategies.Id
查询在15秒内运行,但不会返回任何没有与策略链接的fk的记录。虽然我也想要这些记录。有没有更简单的方法来使用一个简单的where语句找到这两种记录?我不能只为null记录添加另一个AND语句,因为那样会破坏前面的语句。不太确定该怎么做。
以下是我的查询的下半部分。
AND (responses.StrategyFk = strategies.Id Or responses.StrategyFk IS Null)
现在我了解到,通过加入这个OR语句会增加很多开销。
如果没有这个语句,只有:
AND responses.StrategyFk = strategies.Id
查询在15秒内运行,但不会返回任何没有与策略链接的fk的记录。虽然我也想要这些记录。有没有更简单的方法来使用一个简单的where语句找到这两种记录?我不能只为null记录添加另一个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