약 100,000 개의 레코드 인 대용량 데이터 집합을 반환하는 복잡한 쿼리를 작성합니다. 내가 WHERE 절에이 OR 문에 추가 할 때까지 쿼리가 잘 실행 :where 문 최적화 MYSQL
AND (responses.StrategyFk = strategies.Id 또는 responses.StrategyFk이 IS NULL)
지금은에 의해 이해 거기에 or 문을 넣으면 많은 오버 헤드가 추가됩니다. 없이
그 진술 그냥 :
및 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
Ahh 고마워요! 이것은 훨씬 더 효율적입니다. 이제부터는이 명시 적 조인 방법을 사용해야하는 것 같습니다. 정확히 – mmSQL
; 다른 사람들이 당신이하고 싶은 것을 읽고 이해하는 것이 훨씬 쉽고 쉬워졌습니다. –