LINUX.ORG.RU

История изменений

Исправление Legioner, (текущая версия) :

Какое принципиальное отличие данных о количестве записей в таблице от данных в самой таблицы?

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

Вторые ведь как-то нормально работают с изоляцией транзакций.

Ну и count(*) нормально работает в Postgres. Претензия была к тому, что эта операция не работает достаточно быстро. sum(field) тоже не будет работать достаточно быстро, если на то пошло. Честно говоря у меня вообще сомнения в том, что в постгресе с этим есть какие-то проблемы. План такой:

  ->  Index Only Scan using table_pkey on table

Куда уж быстрей, чем посмотреть на индекс?

Исходная версия Legioner, :

Какое принципиальное отличие данных о количестве записей в таблице от данных в самой таблицы?

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

Вторые ведь как-то нормально работают с изоляцией транзакций.

Ну и count(*) нормально работает в Postgres. Претензия была к тому, что эта операция не работает достаточно быстро. sum(field) тоже не будет работать достаточно быстро, если на то пошло.