sybase: problem s order by ... DESC
Miroslav BENES
mbenes na tenez.cz
Pondělí Listopad 27 07:40:11 CET 2000
> Karel Zak <zakkr na zf.jcu.cz> wrote:
>
> : 4/ SELECT * FROM tab WHERE data LIKE 'a%' ORDER BY id;
>
> : - 'data' je *neindexovano*. Zde nastupuje presne to co se ocekava
> : zadny index neni pouzit pochopitelne ani na ORDER BY.
>
> Tak tady zkusim naivni dotaz - proc?
Protoze jako prvni sre zpracovava kaluzule WHERE. Server nejdriv musi
vybrat data, ktera bude predavat kllientovi. Jelikoz nevi jaka budou,
nemuze je predem tridit a az pak vybirat - uz jen proto, ze by si
pridelaval praci.
> Kdyz databazovy server uz jednou kvuli ORDER BY umi jet podle indexu,
> proc tedy sekvencne prolezat tabulku, kazdy zaznam kontrolovat na LIKE
> a pak vysledek tridit, kdyz "bych mohl" (pozor! naivni myslenka! :)
> jet podle indexu rovnou pri LIKE-ovani?
Klauzule WHERE na 99,99 % omezitemnozinu vystupnich
dat. To tedy znamena, ze pokud by data nedriv setridil podle ORDER BY
a az pak vybiral jen nektere polozky podle WHERE, bylo by to trideni
zbytecne.
Navic indexy jsou nastaveny nad celou tabulkou, takze pri opacnem
postupu (nejdriv setridit podle ORDER BY a az pak vybirat podle
WHERE) by po prvnim kroku existovala data, setridena podle ORDER BY,
nad kterymi v tu chvili neexistuje index a vyber se tedy zvrhne opet
do sekvencniho prohledavani.
Tudy cesta nevede.
Jediny spravny postup je slozeny index (data, id}, ktery pujde pouzit
jak v prvnim tak v druhem kroku.
> Exkurs do vnitrniho fungovani databazi uvitam, relevantnimi odkazy na
> konkretni literaturu ale taky nepohrdnu.
Nekde doma bych mel mit skripta "Operacni a databazove systemy"
(VUT Brno). Ale zrovna tenhle predmet nepatril k mym oblibenym, coz
se mi pozdeji vymstilo.
--------------------------
Miroslav BENES
E-mail : mbenes na tenez.cz
TENEZ Chotebor, a.s
--------------------------
Další informace o konferenci Test