Запросы к базе данных - лучше подсчитать количество строк или лучше сохранить счетчик приращений? - PullRequest
2 голосов
/ 27 января 2011

Если бы вы реализовывали приложение для блога - что бы вы предпочли -
Наличие счетчика в таблице "POSTS" для хранения количества комментариев

SELECT comment_count 
  FROM posts WHERE post_id = $id 

... или подсчета количествакомментарии к конкретному сообщению из таблицы «КОММЕНТАРИИ»:

SELECT COUNT(*)
  FROM comments 
 WHERE post_id = $id

Какой из них более оптимизирован?

Ответы [ 2 ]

4 голосов
/ 27 января 2011

Я бы использовал вторую форму, COUNT, пока не убедился, что производительность в этом конкретном SQL-запросе была проблемой.Первое, что вы предлагаете, - это в основном денормализация, и это прекрасно и замечательно, когда вы точно знаете, что это нужно.

Индексы позволят вам выполнить второй запрос довольно быстро, независимо от того.

0 голосов
/ 27 января 2011

Давайте посмотрим на факторы.

Случай 1: Когда вы отображаете пост, вы отображаете комментарии.Это означает, что вы извлекаете их все и можете считать их по мере их отображения.В этом случае, нет.

Случай 2: Когда вы отображаете сообщение, вы не отображаете комментарии, а ссылку с надписью «15 комментариев».В этом случае есть уравнение.

Материализация счетчика:

Стоимость одного комментария при сохранении = 1 Вставка + 1 Обновление

Стоимость показа одного сообщения = 1 Чтение

Среднее количество показов блога = D

Среднее количество комментариев = C

Итак, для какого соотношения Показов D и Комментариев C верно, что:

C * (Вставка + Обновление)

Поскольку D >> C, как правило, верно, я бы предположил, что стоимость этого дополнительного обновления исчезнет.

Это может быть не так важно для блога, но это важная формула, чтобы знать, когда у вас много таблиц и вам необходимо принять эти решения.

...