же тоже где-то есть? Например, сделал я ID SERIAL - он всегда будет +1 добавлять. Не будет же при добавлении любой записи перечитываться вся таблица, чтоб узнать следующий ID)
Нет, с чего бы ему где-то быть? Например, serial можэт пропускать строки при откате транзакцый, при рестарте сервера, теоретически дажэ просто так (используется в его аналоге в Oracle, не используется сейчас в postgres). К тому жэ ты можэшь удалять строки, переставлять значение последовательности или вставлять строки с другими id.
И это, подчёркиваю, только по этому конкретному примеру с serial. А так -- количество нигде не учитывается.
И да, если нужно -- можэшь сам хранить. Заведи отдельную таблицу и триггерами обновляй. Правда, если в ней только значение итоговое -- то оно будет блокировать все параллельные транзакцыи (фактически -- любая запись в таблицу берёт эксклюзивную блокировку на всю таблицу). Переделать можно, если в таблицэ агрегат на какое-то время, а транзакцыи обновляют свои значения. Результат -- надо посчитать сумму и всё, что добавилось после. Кто-то иногда должэн схлопывать промежуточные результаты в итоговый.
Обсуждают сегодня