Я написал запрос, и локально он работает нормально. Когда это жить я получаю эту ошибку:Как сделать мой mysql-запрос со многими левыми объединениями быстрее?
ERROR 1104: The SELECT would examine too many records and probably take a very long time. Check your WHERE and use SET OPTION SQL_BIG_SELECTS=1 if the SELECT is ok
я добавил SET SQL_BIG_SELECTS=1;
. Он работает сейчас, но работает очень медленно. Может ли кто-нибудь разобраться в моем запросе, ege вместо LEFT JOIN использует другой метод. Это мой запрос:
SELECT sh.*,
ps.provider_name,
ps.photo_path AS photo
FROM scholarship sh
left join cat_category_sch ccs
ON ccs.scholar_id = sh.id
left join elg_countries_sch elg
ON elg.scholar_id = sh.id
left join study_level_sch sls
ON sls.scholar_id = sh.id
left join taken_country_sch tcs
ON tcs.scholar_id = sh.id
left join providers ps
ON ps.id = sh.provider
left join countires c1
ON c1.id = elg.county_id
left join countires c2
ON c1.id = tcs.county_id
left join study_level sl
ON sl.id = sls.study_level_id
WHERE sh.status = 1
AND sh.ain_status = 1
AND sh.deadline >= Date_sub(Now(), interval 1 year)
GROUP BY sh.id
ORDER BY sh.id DESC
Заранее спасибо
Для начала ... последние три левого соединения кажутся вам нецелесообразными, вы не используете эти данные, поэтому вам не нужно их использовать. Это может улучшить время выполнения запроса. –
Покажите нам структуры таблиц (с любыми индексами) и запустите EXPLAIN в отношении запроса, чтобы показать, как MySQL выполняет его. –
Последнее 3 требуется также, потому что в некоторых случаях я использовал базу условий для этих таблиц, поэтому я помещаю это так: над запросом я удаляю некоторые условия. в каждой таблице я поддерживаю индекс (auto increment) как id –