Запросы типа
SELECT COUNT(*), user_id
FROM posts
GROUP BY user_id
способны выполнять сканирование индекса , если вы создаете индекс для столбца user_id
. Прочтите это .Сканирование индекса выполняется быстро.Таким образом, предложенный вами запрос просто отлично.SQL и MySQL созданы для таких запросов.
И такие запросы, как
SELECT COUNT(*)
FROM posts
WHERE user_id = 123456
, очень быстрые, если у вас есть индекс user_id
.Вы можете сэкономить несколько десятков микросекунд, если вы ведете отдельную таблицу или нет.Экономия будет трудно измерить.Но вы будете нести расходы на поддержание этой таблицы, как с точки зрения производительности сервера, так и сложности обслуживания программного обеспечения.
Для людей, которые только учатся использовать программное обеспечение баз данных, интуиция в отношении производительности зачастую крайне пессимистична.В пакетах программного обеспечения для баз данных много тысяч лет программистской работы над повышением производительности.Действительно.И вы, вероятно, не можете превзойти их своими собственными вещами.
Почему разработчики MySQL оптимизировали подобные вещи?Таким образом, разработчики, использующие MySQL, могут зависеть от таких вещей, как ваша проблема, без необходимости выполнять дополнительную работу по оптимизации.Они сделали это для вас.Потратьте это время на то, чтобы заставить работать другие части вашего приложения.