Подсчет предметов или увеличение числа? - PullRequest
0 голосов
/ 01 августа 2011

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

Есть ли существенная разница между этими двумя значениями или она очень незначительная, и даже если она небольшая, один метод все же будет лучше, чемДругой?Это не для какого-то конкретного проекта, поэтому, пожалуйста, отвечайте в общем (если это имеет смысл), а не исходя из числа пользователей.

Спасибо.

Ответы [ 4 ]

4 голосов
/ 01 августа 2011

Чтобы получить количество элементов (строк в таблице), вы должны использовать стандартный SQL и делать это по требованию

SELECT COUNT(*) FROM MyTable

Обратите внимание, в случае, если я что-то пропустил, каждый элемент (строка) в таблице имеет свой уникальный идентификатор, будь то номер детали, некоторый код или автоинкремент. Поэтому добавление новой строки может вызвать «автоинкремент» столбца.

Это не связано с "подсчетом строк". Из-за DELETE или ROLLBACK числа могут быть не смежными.

Попытка сохранить количество строк отдельно приведет к слезам и / или катастрофе. Попытка использовать COUNT (*) + 1 или MAX (id) +1 для генерации нового идентификатора строки еще хуже

1 голос
/ 01 августа 2011

Я думаю, что в вашем вопросе есть некоторая путаница.Моя интерпретация заключается в том, хотите ли вы сделать select count(*) или столбец, в котором вы отслеживаете фактический счет.

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

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

0 голосов
/ 01 августа 2011

Я бы пошел с просто подсчетом. Если вы заметили проблему с производительностью, вы можете рассмотреть другие варианты, но как только вы сохраните отдельное значение, вам нужно будет поработать, чтобы убедиться, что оно всегда корректно. Используя COUNT(), вы всегда получаете фактическое число "прямо изо рта лошади", так сказать.

По сути, не начинайте оптимизацию, пока вам не придется. Если все работает нормально и быстро, используя COUNT(), то сделайте это. В противном случае сохраните счет где-нибудь, но вместо добавления / вычитания, чтобы обновить сохраненное значение, при необходимости введите COUNT(), чтобы получить новое количество элементов

0 голосов
/ 01 августа 2011

На моем форуме я подсчитываю вложенные темы на форуме следующим образом:

SELECT COUNT(forumid) AS count FROM forumtable

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

...