Indexovani - teorie

Honza Pazdziora adelton na informatics.muni.cz
Středa Říjen 16 12:44:49 CEST 2002


On Wed, Oct 16, 2002 at 12:21:24PM +0200, otakarek na post.cz wrote:
> Kdyz jsme u tech indexu, tak me napada otazka.
> Kdyz mam napr. SQL 'SELECT sl1,sl2,sl3 FROM tbl WHERE sl1='xxx' AND
> sl2='yyy' je lepsi provest indexovani jednotlive(tj. prvni index na
> sl1 a druhy index na sl2) nebo provest jeden slouceny index? Druhy

Pokud delate dotaz

	WHERE sl1 = 'xxx' AND sl2 = 'yyy'

tak si to muzete predstavit i jako (meta) dotaz

	WHERE sl1 || sl2 = 'xxxyyy'

A slozeny index nad (sl1, sl2) je v podstate toto. Takze pro ten and
jednoznacne slozeny index.

Predstavte si pripad, ze pro kazdou hodnotu sl1 existuje 1000 hodnot
sl2, ale dvojice (sl1, sl2) je unikatni. Pak pri pouziti indexu nad
takto unikatni dvojici vyhledani indexem najde prave jeden zaznam.
Zatimco kdyz budete mit indexy zvlast nad sl1 a sl2, tak pomoci indexu
nad sl1 dotaz najde 1000 zaznamu, a ty pak bude muset projit, aby
zjistil, kde se jeste sl2 rovna 'yyy'. Samozrejme, server na to muze
pouzit i hash join nebo sort join, ale stale plati, ze bude treba
zpracovat podstatne vice zaznamu. A tedy ze zpracovani bude narocnejsi
a tudiz delsi.

> pripad je v podstate stejny jen misto operatoru AND dojde k
> nahrazeni operatorem OR. Testoval jsem to v praxi a vykonove je to

Operator OR je zcela opacna situace. Protoze to, ze mate index nad
(sl1, sl2) Vam vyhledani vsech zaznamu, kde se sl1 = 'xxx' nijak
neurychli. Zato ale pote, co server nasel vsechny zaznamy, kde sl1
= 'xxx', musi (pokud nad sl2 nebude index) projit jeste jednou celou
tabulku a zjistit, kdeze se sl2 = 'yyy'. Cili vysledkem pravdepodobne
bude, ze projde celou tabulku a u kazdeho zaznamu bude hledat, zda
plati rovnost pro sl1 nebo sl2.

Muzete samozrejme udelat slozeny index nad (sl1, sl2), a pak
jednoduchy index nad sl2 -- pak by mely pres indexy jit obe moznosti.

Samozrejme, pokud ty atributy budou mit vhodnou kardinalitu nebo budou
splneny spousty jinych podminek, tak bude lepsi projit treba celou
tabulku nez pouzivat jakekoli indexy, cili tohle berte pouze jako
obecne doporuceni jak zacit. Konkretni situaci si budete muset
zanalyzovat sam.

-- 
------------------------------------------------------------------------
 Honza Pazdziora | adelton na fi.muni.cz | http://www.fi.muni.cz/~adelton/
      ... all of these signs saying sorry but we're closed ...
------------------------------------------------------------------------


Další informace o konferenci Test