ďťż
 
Ciekawosta =?iso-8859-2?q?wydajno=B6ci?= DISTINCT i GROUP BY na PostgreSQLu ďťż
 
Ciekawosta =?iso-8859-2?q?wydajno=B6ci?= DISTINCT i GROUP BY na PostgreSQLu
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

Ciekawosta =?iso-8859-2?q?wydajno=B6ci?= DISTINCT i GROUP BY na PostgreSQLu



Filozof - 04-11-2005 23:17
Ciekawosta =?iso-8859-2?q?wydajno=B6ci?= DISTINCT i GROUP BY na PostgreSQLu
  Witam

Pracujac z bazami dużymi danych na bazie PostgreSQL (kilkaset tysięcy
rekordow) zauwazylem ciekawe i jednoczesnie niespodziewane czasy wykonania
ponizszych zapytan:

select "Client" as "Browser" from "tblAccessLog"
group by "Browser"; - 1,94sek

select distinct "Client" as "Browser"
from "tblAccessLog"; - 13,94sek

Oczywiscie oba zapytania zostaly wykonane na tym samym zestawie rekordow
;). Wyniki wydaja mi sie nieco paradoksalne albowiem oczekiwalbym, ze
zapytanie drugie wykona sie szybciej jakoze jest (z zalozenia)
przystosowane do wyszukiwania duplikatow.

Moze ktos kto zna nieco blizej parser i optymalizator zapytan PostgreSQLa
i zna odpowiedz na pytanie: Skąd się biora takie dziwolagi?

Pozdrawiam





Artur Muszynski - 04-11-2005 23:17

  > select "Client" as "Browser" from "tblAccessLog"
> group by "Browser"; - 1,94sek
>
> select distinct "Client" as "Browser"
> from "tblAccessLog"; - 13,94sek
>
> Oczywiscie oba zapytania zostaly wykonane na tym samym zestawie rekordow
> ;). Wyniki wydaja mi sie nieco paradoksalne albowiem oczekiwalbym, ze
> zapytanie drugie wykona sie szybciej jakoze jest (z zalozenia)
> przystosowane do wyszukiwania duplikatow.
>
> Moze ktos kto zna nieco blizej parser i optymalizator zapytan PostgreSQLa
> i zna odpowiedz na pytanie: Skąd się biora takie dziwolagi?

A nie ma na to wpływu ilość zwracanych rekordów w obu przypadkach? Jakie to
są u ciebie wartości?

artur

>
> Pozdrawiam




Filozof - 04-11-2005 23:17

  On Wed, 02 Nov 2005 22:43:19 +0100, Artur Muszynski wrote:

>> select "Client" as "Browser" from "tblAccessLog"
>> group by "Browser"; - 1,94sek
>>
>> select distinct "Client" as "Browser"
>> from "tblAccessLog"; - 13,94sek
>>
>> Oczywiscie oba zapytania zostaly wykonane na tym samym zestawie rekordow
>> ;). Wyniki wydaja mi sie nieco paradoksalne albowiem oczekiwalbym, ze
>> zapytanie drugie wykona sie szybciej jakoze jest (z zalozenia)
>> przystosowane do wyszukiwania duplikatow.
>>
>> Moze ktos kto zna nieco blizej parser i optymalizator zapytan PostgreSQLa
>> i zna odpowiedz na pytanie: Skad sie biora takie dziwolagi?
>
> A nie ma na to wpływu ilość zwracanych rekordów w obu przypadkach?
> Jakie to są u ciebie wartości?
>

Na pewno ma jakis wplyw. Czasy jakie podalem zostaly odczytane z paska
stanu PgAdmin3 z pominięciem czasu potrzebnego na zaladowanie danych do
okna wynikow.

Przy wykonaniu podobnego zapytania na tej samej tabeli na polu mniej
zróznicowanym czasy rowniez byly rozbiezne na niekorzysc DISTINCT.
Zwroconych wynikow bylo dokaldnie 2, a czasy wynosily 1,099 sek i 2,316sek.

>
> Jakie to są u ciebie wartości?
>

Analizowane pole w obu przypadkach jest typu text. Ilosc
rekordow zwroconych w przypadku pierwszym wynosi dokladnie 1346.

>
>> Pozdrawiam
>




Artur Muszynski - 04-11-2005 23:17

  >>> select "Client" as "Browser" from "tblAccessLog"
>>> group by "Browser"; - 1,94sek
>>>
>>> select distinct "Client" as "Browser"
>>> from "tblAccessLog"; - 13,94sek
>>>
>>> Oczywiscie oba zapytania zostaly wykonane na tym samym zestawie rekordow
>>> ;). Wyniki wydaja mi sie nieco paradoksalne albowiem oczekiwalbym, ze
>>> zapytanie drugie wykona sie szybciej jakoze jest (z zalozenia)
>>> przystosowane do wyszukiwania duplikatow.
>>>
>>> Moze ktos kto zna nieco blizej parser i optymalizator zapytan
>>> PostgreSQLa
>>> i zna odpowiedz na pytanie: Skad sie biora takie dziwolagi?

Zdaje się jest tak, że distinct tworzy wynik, potem go sortuje i usuwa
duplikaty, czyli to co musi robić w ogólnym przypadku - tutaj masz tylko
szczególny przypadek, w którym mógłby tego nie robić. Przy group by jak
widać bardziej się wysilili, co widać po EXPLAIN - może dlatego, że
agregacje sa często stosowane i grupuje się po kolumnach, na których
powinien być założony indeks. Distinct jest tym dla SQL, co goto dla C, więc
pewnie dlatego nie jest dobrze zoptymalizowany.

artur





=?UTF-8?B?TWljaGHFgg==?= - 04-11-2005 23:17

  Artur Muszynski wrote:
> powinien byĂŚ zaÂłoÂżony indeks. Distinct jest tym dla SQL, co goto dla C, wiĂŞc
> pewnie dlatego nie jest dobrze zoptymalizowany.

dosc ryzykowne porownanie ;)

pozdr,
--
mgl
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    Czy zna (obsługuje) ktoś program Iso Draw ? MYSQL - kodowanie w ISO-PL strona plus baza w iso do utf-8 Kodowanie: z iso na utf postgresql - int/int postgresql Select count(*) czy raczej Select count(ID) Postgres - replikcja master-master Dopasowanie do "najlepszego" dopasowania :) [ PostgreSQL] Wstawianie nowego wiersza w przypadku jego braku podczas SELECT w PostgreSQL Konwesja znaków w dump'ie bazy danych - ISO -> utf-8 -> ISO -> utf-8
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • oefg.opx.pl
  • Cytat

    Decede mihi sole - nie zasłaniaj mi słonca.
    Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści
    Hoc fac - tak czyń.
    A tergo - od tyłu; z tyłu.
    I czarne włosy posiwieją. Safona

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com