この複雑なクエリを記述して、約100,000レコードの大きなデータセットを返します。このORステートメントをWHERE句に追加するまで、クエリは正常に実行されます。
AND(responses.StrategyFk=strategies.Idまたはresponses.StrategyFkISNull)
orステートメントをそこに配置すると、多くのオーバーヘッドが追加されることを理解しました。
その声明なしでただ:
AND response.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