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 Databases