Thread View: pl.comp.bazy-danych
5 messages
5 total messages
Started by M.M.
Fri, 22 Jan 2016 19:37
optymalizacja count.
Author: M.M.
Date: Fri, 22 Jan 2016 19:37
Date: Fri, 22 Jan 2016 19:37
9 lines
1409 bytes
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.
Author: JaceK
Date: Fri, 22 Jan 2016 21:17
Date: Fri, 22 Jan 2016 21:17
30 lines
2389 bytes
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.
Author: M.M.
Date: Fri, 22 Jan 2016 21:49
Date: Fri, 22 Jan 2016 21:49
37 lines
2953 bytes
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.
Author: szemrany
Date: Fri, 22 Jan 2016 22:13
Date: Fri, 22 Jan 2016 22:13
16 lines
1430 bytes
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.
Author: JaceK
Date: Fri, 22 Jan 2016 22:53
Date: Fri, 22 Jan 2016 22:53
17 lines
1869 bytes
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