ведение учета количества строк - PullRequest
0 голосов
/ 13 июня 2018

Скажем, у нас есть таблица "posts" в базе данных MySQL, которая, как следует из ее названия, хранит записи пользователей на какой-то социальной платформе.Теперь Я хочу, чтобы отображало количество сообщений, созданных каждым пользователем.Потенциальным решением может быть:

SELECT COUNT(*) FROM posts WHERE .... и т. Д .;

Но для меня - по крайней мере - это выглядит как дорогой запрос .Не лучше ли вести запись в какой-нибудь таблице, скажем (статистика), используя столбец с именем (number_of_posts).Я знаю, что в последнем сценарии мне пришлось бы обновлять обе таблицы (сообщения) и (статистику) после создания сообщения.Как вы думаете, лучший способ справиться с этим?

1 Ответ

0 голосов
/ 13 июня 2018

Запросы типа

 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, могут зависеть от таких вещей, как ваша проблема, без необходимости выполнять дополнительную работу по оптимизации.Они сделали это для вас.Потратьте это время на то, чтобы заставить работать другие части вашего приложения.

...