🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.bazy-danych
5 messages
5 total messages Started by M.M. Fri, 22 Jan 2016 19:37
optymalizacja count.
#194805
Author: M.M.
Date: Fri, 22 Jan 2016 19:37
9 lines
1409 bytes
W Postgresie wolno działa mi 

select count(*) from table;

Moim zdaniem nie powinno to działać wolno. Silnik bazy może
sobie zliczać na bieżąco ilość rekordów i podać wyniki. Jest 
jakaś opcja do tego, aby nie pisać procedur w zdarzeniach?

Pozdrawiam
Re: optymalizacja count.
#194806
Author: JaceK
Date: Fri, 22 Jan 2016 21:17
30 lines
2389 bytes
On 22.01.2016 20:37, M.M. wrote:
> W Postgresie wolno działa mi
>
> select count(*) from table;
>
> Moim zdaniem nie powinno to działać wolno. Silnik bazy może
> sobie zliczać na bieżąco ilość rekordów i podać wyniki. Jest
> jakaś opcja do tego, aby nie pisać procedur w zdarzeniach?

Liczba rekordów w tabeli nie jest atrybutem, który baza utrzymuje w 
ramach swojej pracy (w przeciwieństwie do np. nazw i lokalizacji 
indeksów, tabel, definicji ról itp. które to atrybuty są w słowniku bazy 
danych).

Oczywiście można sobie wyobrazić mechanizm, który to robi, ale z 
jakiegoś powodu tego się nie implementuje - prawdopodobnie dlatego, że w 
dynamicznych środowiskach i wielu tabelach baza by spędzała mnóstwo 
czasu na utrzymywaniu takich "wyliczanych" informacji nieistotnych dla 
poprawnego działania bazy, zamiast na obsłudze zapytań. Że nie wspomnę o 
mechanizmach zapewniających odpowiedni poziom izolacji: jeden użytkownik 
dostanie count(*) ze swojej sesji, a inny po wprowadzeniu dodatkowych 
niezatwierdzonych jeszcze rekordów inną wartość. Utrzymywanie wielu 
wartości dla wielu sesji byłoby koszmarem.

Statystyki na tabelach są najbliższe konceptowi utrzymywania informacji 
o liczbie rekordów w tabeli przez bazę. Nie są to jednak wartości 
utrzymywane na bieżąco lecz gromadzone na żądanie lub w ramach 
cyklicznego procesu utrzymaniowego.

JaceK
Re: optymalizacja count.
#194807
Author: M.M.
Date: Fri, 22 Jan 2016 21:49
37 lines
2953 bytes
On Friday, January 22, 2016 at 10:17:25 PM UTC+1, JaceK wrote:
> On 22.01.2016 20:37, M.M. wrote:
> > W Postgresie wolno działa mi
> >
> > select count(*) from table;
> >
> > Moim zdaniem nie powinno to działać wolno. Silnik bazy może
> > sobie zliczać na bieżąco ilość rekordów i podać wyniki. Jest
> > jakaś opcja do tego, aby nie pisać procedur w zdarzeniach?
> 
> Liczba rekordów w tabeli nie jest atrybutem, który baza utrzymuje w 
> ramach swojej pracy (w przeciwieństwie do np. nazw i lokalizacji 
> indeksów, tabel, definicji ról itp. które to atrybuty są w słowniku bazy 
> danych).
> 
> Oczywiście można sobie wyobrazić mechanizm, który to robi, ale z 
> jakiegoś powodu tego się nie implementuje - prawdopodobnie dlatego, że w 
> dynamicznych środowiskach i wielu tabelach baza by spędzała mnóstwo 
> czasu na utrzymywaniu takich "wyliczanych" informacji nieistotnych dla 
> poprawnego działania bazy, zamiast na obsłudze zapytań. Że nie wspomnę o 
> mechanizmach zapewniających odpowiedni poziom izolacji: jeden użytkownik 
> dostanie count(*) ze swojej sesji, a inny po wprowadzeniu dodatkowych 
> niezatwierdzonych jeszcze rekordów inną wartość. Utrzymywanie wielu 
> wartości dla wielu sesji byłoby koszmarem.
> 
> Statystyki na tabelach są najbliższe konceptowi utrzymywania informacji 
> o liczbie rekordów w tabeli przez bazę. Nie są to jednak wartości 
> utrzymywane na bieżąco lecz gromadzone na żądanie lub w ramach 
> cyklicznego procesu utrzymaniowego.
> 
> JaceK


Dziękuję serdecznie za odpowiedź.
Przyjmuję za pewne, że nie ma co szukać takiej 'opcji' w postgresie.

Pozdrawiam
Re: optymalizacja count.
#194808
Author: szemrany
Date: Fri, 22 Jan 2016 22:13
16 lines
1430 bytes
On Fri, 22 Jan 2016 13:49:20 -0800 (PST), M.M. wrote:

> Dziękuję serdecznie za odpowiedź.
> Przyjmuję za pewne, że nie ma co szukać takiej 'opcji' w postgresie.

Sprawdź jeszcze z ciekawości:

 select count(pk) from table 

:-)

-- 
howgh
szemrany
"Zrozumienie umożliwia zastąpienie nieracjonalnych działań lub bezradności
przez działania racjonalne." M.Mazur, ojciec polskiej szkoły cybernetyki
Re: optymalizacja count.
#194809
Author: JaceK
Date: Fri, 22 Jan 2016 22:53
17 lines
1869 bytes
On 22.01.2016 22:49, M.M. wrote:
> Przyjmuję za pewne, że nie ma co szukać takiej 'opcji' w postgresie.

Tego niestety nie wiem. W pamięci mi majaczy, że kiedyś w czasach 
prehistorycznych postgres miał jakieś kłopoty z powolnym count ale to 
zostało poprawione. Z ciekawości też wpisałem w google slow count 
postgresql i ku swojemu zaskoczeniu widzę, że są świeże posty na forach. 
Może ktoś kto używa tego silnika się wypowie. Tutaj jeszcze z ich wiki:

https://wiki.postgresql.org/wiki/Slow_Counting

Być może założenie odpowiedniego indeksu poprawi sprawę bo "PostgreSQL 
will take advantage of available indexes against the restricted field(s) 
to limit how many records must be counted". Ale nie znam bebechów 
postgresa i nie wiem co tam można mu podkręcić.

JaceK
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads