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