Posted By: vejpuste (Libor Vejpustek) on 'CZdatabases'
Title:     Re: Ad: Zajimavost
Date:      Thu Sep 12 09:10:36 2002

> Ahoj.
> 
>    Select count(*) from a where exists
>    select ... where IN(select)
> 
>   Ano, to jsou naprosto funkcni reseni, ale kdyz mate tabulky s miliony 
> zaznamu, tak IN je pomaly jak svine (prominte to slovo) a exists je 
> sice lepsi, ale take to neni ono.

    Samozrejme. Hlavni je, jestli je na druhe tabulce, ktera se prochazi 
exist spravne udelanej a pouzivanej index. Pro kazdy radek z 1 tabulky se 
totiz musi provest select ve druhe.
    Kdyz se pouzije in, tak se vytvori pomocna tabulka se seznamem ID, kterou 
pak prochazi a zjistuje, jestli je v seznamu. To vse tolikrat, kolik je radek 
v prvni tabulce.
    Kdyz se pouzije exist, tak mu staci zjistit, jestli to vratilo alespon 
jeden radek. Proto se doporucuje pouzit ve vnorenem selectu select 'X' from. 
To totiz uplne staci a pokud je rozumne udelanej index, tak staci projit index 
a nemusi sahat do dat tabulky. 
    Pri spravnem nastaveni by zrychleni melo byt extremni. 

                                        Libor Vejpustek
                                        Ceska zemedelska univerzita Praha
http://web.czu.cz/~vejpuste/            E-mail : vejpuste@uvt.czu.cz

Search the boards