Dotazovaci plan PostgreSQL
Honza Pazdziora
adelton na informatics.muni.cz
Úterý Duben 6 10:34:06 CEST 2004
On Tue, Apr 06, 2004 at 10:14:03AM +0200, Ing. Pavel Janousek wrote:
>
> dosel jsem dneska na podivnou vec. Mam tabulky
>
> addr a excalibur s 1 textovym sloupcem adresa (cloaking nedelam:->)
[...]
> spam=> explain analyse select adresa from (select adresa from addr union
> select adresa from excalibur) as foo order by foo.adresa;
[...]
> spam=> explain analyse select distinct(adresa) from (select adresa from
> addr union select adresa from excalibur) as foo order by foo.adresa;
[...]
> Zatimco v druhem pripade distinct (Unique v nevyssi urovni
> planu) v podstate nic nestal (celkove 70ms, to neresim), tak v obou
> pripadech je nasledujici:
>
> Sort
> Unique
> Sort
>
> Predpokladam, ze Unique je implementovan prave tak, ze
> "potrebuje" sort pred sebou a pak je znacne efektivni a navic
> nedestruktivni (?) => druhy Sort je zcela zbytecny, protoze Unique
> setridenost neporusi... Kdyby to bylo zanedbatelne, tak to neresim, ale
Unique sam o sobe nemusi nutne potrebovat sort -- unique vyber udelate
napriklad pomoci hashovani.
Naopak, to ze vysledkem nejakeho subselectu je setrideny vysledek
neznamena, ze ta setrizenost je v dalsim vypoctu implicitne zachovana.
> ten druhy sort v podstate cely dotaz zdrazuje skoro na dvojnasobek (viz
> actual time).
>
> Takze jak to, ze unique jednou pozna, ze nemusi nic delat a kdyz
> ma sortit, tak nepozna, ze uz to ma hotovo?
Je potreba si uvedomit, ze union je v podstate select distinct ...
union all. Ze union interne pouzije sort je jen shoda nahod, nemuzete
na to spolehat.
... ale nevim, jestli odpovidam na to, na co se ptate. ;-)
--
------------------------------------------------------------------------
Honza Pazdziora | adelton na fi.muni.cz | http://www.fi.muni.cz/~adelton/
.project: Perl, mod_perl, DBI, Oracle, large Web systems, XML/XSL, ...
Only self-confident people can be simple.
Další informace o konferenci Test