count(*)

deRamzes

Новичок
count(*)

Привет Всем!
столкнулся с такой проблемой как подсчет
кол-во записей в базе

умнее чем через count(*) or count("FildName") способа не нашол
НО он отрабатывает довольно долго ~43 секунды и всего насчитывает ~800 000 записей

В чем такой тормоз? Где я наступил на грабли?
 

Сергей123

Новичок
Нет, я просто переспросил, - не в базе, а таблице подсчёт нужен?
Запрос и индексы показал бы...
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
count(*) обязательно делает seq_scan. А таблица в 800k записей по объёму немаленькая.
Если count(*) делается часто, а меняется таблица редко, то можно повесить триггер, к-рый при изменении будет обновлять статистику.
 

deRamzes

Новичок
я так понял что без отдельно таблицы со статистикой не обойтися.
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Автор оригинала: Бресь Сергей
2 Sad Spirit
И для COUNT(ПРИМАРИКЕЙПОЛЕ) тоже?
Угу. Издержки MVCC: информация о видимости поля для текущей транзакции хранится исключительно в таблице, в индексе её нет.
 

deRamzes

Новичок
а как быть если подсчет нужен в виде

select INTO Some_Fild count(*) from t_1 JOIN t_2 ON t_1."Nr"=t_2."Nr" where t_2."Status"=1;
 
Сверху