Мне нужно найти учителей, говорящих на определенном языке, и иметь доступность в будущем в правильном месте или в исходном местоположении учителя, для которого не требуется наличие доступности. Несколько учителей могут находиться в одном месте. Этот запрос работает, но очень медленный. Какие индексы я должен использовать?Какие индексы следует добавить для этого медленного запроса на соединение mulitple?
Select
teachers.teacher_id,
teacherLocations.location_id
From
tdb_teachers AS teachers
Join
tdb_teacher_languages As teacherLanguages
On teacherLanguages.teacher_id = teachers.teacher_id And
teacherLanguages.language_id = 33
Left Join
tdb_availability As locAvail
On locAvail.teacher_id = teachers.teacher_id And
locAvail.end_date >= 1381449600
Join
tdb_locations AS teacherLocations
On (
teacherLocations.location_id = locAvail.location_id Or
teacherLocations.location_id = teachers.location_id
) And
teacherLocations.latitude != "" And
teacherLocations.longitude != ""
Вы всегда должны проверять, установлены ли индексы на все, что связано, или что-либо внутри предложения where (в большинстве случаев). – JonH
Измените условия в своем объединении и используйте предложение WHERE. – JonH
Вы пробовали EXPLAIN, чтобы узнать узкое место? –