Есть запрос, который выполняется 7 секунд. Записей в таблице img около 10к.
SELECT img.id,date,title,url,views,votes,values,name
FROM img
INNER JOIN img_views ON img.id = img_views.m
INNER JOIN img_rating ON img.id = img_rating.m
INNER JOIN users ON img.user = users.id
WHERE status = '1'
ORDER BY img.id DESC LIMIT 0, 10
Тестами выяснил, что тормоза идут от INNER JOIN img_views и INNER JOIN img_rating. В этих таблицах хранятся данные о рейтинге записей и количество просмотров, по 10к в каждой таблице.
Есть ли способ оптимизировать запрос? И есть ли смысл хранить данные о рейтинге записей и количество просмотров в других таблицах? Таблицы в InnoDB.
Ответ
Вам стоит добавить в таблицу img поля рейтинга и просмотров. Если таблицы связаны один к одному, то для увеличения производительности следует их соединить. Если отношение один ко многим, то написать триггер который будет выполнятся при добавлении записи в таблицу рейтингов или посещений и увеличивать счетчик этих данных в таблице img.
Комментариев нет:
Отправить комментарий