我正在編寫這個複雜的查詢來返回一個大型數據集,大約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
;與其他人一起閱讀和理解您要做的事情更容易。 –