У меня есть две таблицы.
Один содержит список продуктов, первичным ключом которого является идентификатор продукта.Давайте представим, что ~ 10 столбцов с информацией о продукте сведены в один.
В другом содержится список баллов, которые пользователи выставляют за продукты.Столбцы - это идентификатор продукта, идентификатор пользователя и рейтинг.В этой таблице может быть на порядок больше записей, чем в таблице продуктов.
Я хочу получить в одном запросе всю информацию о продукте, а также его среднюю оценку и число пользователей.рейтинги пользователей.
Кажется, что это правильный путь:
SELECT
p.p_id,
p.product_info,
( SELECT AVG(score) FROM ratings AS r WHERE r.p_id = p.p_id ) avg_rating,
( SELECT COUNT(score) FROM ratings AS r WHERE r.p_id = p.p_id ) num_ratings
FROM products AS p
Реальный вопрос: Как это выглядит с точки зрения производительности при увеличении моей базы данных?Можно ли использовать меньше подзапросов и, возможно, заменить их объединениями?
Дополнительный вопрос: У меня был план, в котором я бы кэшировал среднюю оценку и количество оценок для каждого продукта в продуктахтаблица и обновлять это всякий раз, когда новый счет или обновленный счет прибывает.Это делает запрос очень простым, но моя интуиция говорит мне, что это действительно наивно.Предполагая, что это таблица InnoDB, кто-то может объяснить более определенно, почему такого рода кэширование может быть, а может и не быть хорошей идеей?