У меня проблема с оптимизацией действительно медленного SQL-запроса.Я думаю, что это проблема с индексами, но я не могу найти, какой индекс мне нужно применить.
Это запрос:
SELECT
cl.ID, cl.title, cl.text, cl.price, cl.URL, cl.ID AS ad_id, cl.cat_id,
pix.file_name, area.area_name, qn.quarter_name
FROM classifieds cl
/*FORCE INDEX (date_created) */
INNER JOIN classifieds_pix pix ON cl.ID = pix.classified_id AND pix.picture_no = 0
INNER JOIN zip_codes zip ON cl.zip_id = zip.zip_id AND zip.area_id = 132
INNER JOIN area_names area ON zip.area_id = area.id
LEFT JOIN quarter_names qn ON zip.quarter_id = qn.id
WHERE
cl.confirmed = 1
AND cl.country = 'DE'
AND cl.date_created <= NOW() - INTERVAL 1 DAY
ORDER BY
cl.date_created
desc LIMIT 7
MySQL требуется около 2 секунд, чтобы получить результат,и начать работать в pix.picture_no, но если я выставлю index на «date_created», запрос будет выполняться намного быстрее и займет всего 0,030 с.Но проблема в том, что «INNER JOIN zip_codes ...» не всегда находится в запросе, а когда нет, принудительный индекс снова делает запрос медленным.
Я думал над созданием решенияпо условиям PHP, но хотелось бы знать, в чем проблема с индексами.