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