Chtel bych doplnit informaci ohledne malohodnotovych atributu a jejich indexace. Pokud podle malohodnotoveho atributu budete vyhledavat, neprinese indexace tohoto atributu zadne zrychleni. Pro takove atributy umi nektere databaze (Oracle) vytvaret "binarni" indexy.
Dalsi poznamka se tyka pouzivani prikazu select a rychlosti odezvy. I presto, ze budete mit zvolene dobre indexy, vyhnete se pouzivani vnorenych selektu. Zpomaleni neni citelne na ucebnicovem prikladu, ale na databazi s mnoha set zaznamy obzvalste pri spojeni vice tabulek. Podobna poznamka plati pro rozsahle where podminky s operatorem "or" nad vice tabulkami.
Dalsi poznamka se tyka tabulek, kde je index nad vetsinou atributu. Napriklad tabulka obsahuje ctyri atibuty: tri ideca (cizi klice) a jednu hodnotovy atribut. Pokud se k tabulce pritupuje zaroven s omezenim na vsechny tri cizi klice, je zbytecne po nalezeni zaznamu v indexu jit pro hodnotu do tabulky. K urychleni pritupu k takovym tabulkam exituji specelni struktury (v Oracle se jmenuji "index table") uchovavajici hodnotu primo v klici.
Posledni poznamka je navrhem na problem s databazi squid logu. Prochazeni milionu zaznamu bude pochopitelne pomalejsi nez select nad desitkami zaznamu. Proto se nabizi pouziti datoveho skladu a z primaprni tabulky podle zamyslenych statistik vysumovat data do nove vytvorene tabulky (tabulek). Tato operace se da presunout na nocni hodiny a bezne denni prochazeni a statistiky jsou pak mnohonasobne rychlejsi.
Nejedna se o binarni, ale o bitmapove indexy.
Ad "index table": Normalni tabulky se ukladaji jako heap, tj. nejsou setridene a pro urychleni vyhledavani je nutne vytvorit indexy nebo partitions. Pokud se vsak k datum v tabulce bude primarne pristupovat pres primarni klic a tabulka se prilis casto neaktualizuje, je vhodne ji rovnou reprezentovat ve forme indexu, tj. setridene podle primarniho klice. Tato representace ma vsak i dost nevyhod a osobne jsem nezjistil ze by byla nejak fantasticky rychlejsi nezli kombinace table+index. Samozrejme prinasi vyraznou usporu mista zejmena pro cross referenci mezi dvema tabulkami (mapovani n x m ).
Ad datawarehouse: S uspechem lze pouzit partitioning bez nutnosti mit specializovanou databazi.
Este by som doplnil moznost odporucit databazovemu serveru akym sposobom ma narabat s udajmi. Syntax je: /*+ hint */
Pricom takychto hintov su (aspon v db Oracle) desiatky.
Napr. pre odporucenie indexu pri selecte je syntax:
SELECT /*+ INDEX ( table [index [index]...] ) */
...
1) a ako teda napisat select nad viacerymi tabulkami bez pouzitia "rozsiahlych" where podmienok a/alebo vnorenych selektov?
2) btw vsetky index(y/i?:) v oracle uchovavaju hodnotu atributu ("priamo v kluci"). index organised tables 'len' zabranuju zbytocnej duplikacii dat a s tym spojenej rezii.
3) tie indexy su bitmapove nie "binarne"