Страницы

Поиск по вопросам

среда, 17 октября 2018 г.

Медленный SQL запрос

Есть запрос, который выполняется 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.

Комментариев нет:

Отправить комментарий