12.07.2015 Views

CES 2004 - Vitajte na stránkach www.einsty.hostujem.sk

CES 2004 - Vitajte na stránkach www.einsty.hostujem.sk

CES 2004 - Vitajte na stránkach www.einsty.hostujem.sk

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

I N F O W A R EIndexy <strong>na</strong>d poh¾admiŠTRUKTÚRA DÁTCie¾om nášho èlánku je opis indexov v MicrosoftSQL Serveri 2000, problematika z nepochopite¾nýchdôvodov vynechávaná èi obchádzaná. Pretoveríme, e èitate¾ sa dozvie nové cenné teoretickéfakty o indexovaní a jeho aplikovaní v praxi.Na úvod definujme základné pojmy týkajúce saštruktúry dát, klastrovaných a neklastrovanýchindexov, <strong>na</strong>jmenších alokovate¾ných jednotieka štruktúr, v ktorých sú usporiadané.Pre štruktúru dát platia <strong>na</strong>sledujúce tvrdenia: Dáta sú uloené len v dátových súboroch Databáza obsahuje práve jeden primárny dátovýsúbor (s príponou .mdf) Databáza obsahuje buï iadny, alebo aspoò jedensekundárny dátový súbor (s príponou .ndf) Databáza obsahuje aspoò jeden transakèný log(s príponou .ldf) Transakèné logy primárne slúia <strong>na</strong> obnovutransakcií a neobsahujú dáta Dáta sú ukladané <strong>na</strong> dátové stránky Dátové stránky majú ve¾kos 8 KB Dátové stránky sú usporiadané po ôsmich do tzv.extentov (obr. 1)Štruktúra dát nie je závislá od súborového systému,aj keï sa ve¾mi odporúèa súborový systém NTFSpre lepšie monosti zabezpeèenia. Namiesto klastra,ktorý je <strong>na</strong>jmenšou alokovate¾nou jednotkou v súborovomsystéme, je <strong>na</strong> úrovni databáz pouitý extents ve¾kosou 64 KB. Inými slovami to z<strong>na</strong>mená, e priobr. 1zväèšovaní databázy o jeden MB sa tá zväèší o 16extentov (16 × 64 KB = 1024 KB = 1 MB). Takistoplatí, e jeden riadok v tabu¾ke nesmie svojouve¾kosou presiahnu stránku. V <strong>sk</strong>utoènosti jeve¾kos riadka ešte obmedzená aj tým, e kadádátová stránka má aj svoju hlavièku s ve¾kosou 132B a <strong>na</strong> riadok ostane len 8060 B. Riadok tie nemôeprestupova z jednej stránky <strong>na</strong> druhú. Teda <strong>na</strong>pr.riadok s ve¾kosou 4035 B sa zmestí <strong>na</strong> jednu dátovústránku len jeden. Z<strong>na</strong>ková súprava a zoraïovanie,ktoré je definované vo všetkých databázach <strong>na</strong> serveri,sa urèuje pri inštalácii produktu alebo pri prestavanídatabázy master. Obe tieto <strong>na</strong>stavenia súzhrnuté v takzvaných Collation settings. Zoraïovaniemôe by definované ako binárne alebo slovníkové(bi<strong>na</strong>ry a dictio<strong>na</strong>ry). Dictio<strong>na</strong>ry order je poèiatoèným<strong>na</strong>stavením a definuje abecedné usporiadanie.Záz<strong>na</strong>my sú však zadávané <strong>na</strong> dátové stránky vdyneusporiadane. Na poslednom mieste je vdy <strong>na</strong>jnovšízáz<strong>na</strong>m. Takému usporiadaniu dát sa hovoríheap alebo neusporiadaná kopa dát. Pri malýchdatabázach, samozrejme, nie je problémom dopytovaaj neusporiadané dátové stránky, ale priväèších tabu¾kách je nevyhnutné indexovanie, abypouívate¾ nemusel pri kadej aktualizácii aleboèítaní dát èaka neúnosne dlhý èas <strong>na</strong> vrátenievýsledkov dopytu. Na usporiadanie dát sú urèenépráve indexy.INDEXYIndexy sú definované ako štruktúry <strong>na</strong> urýchleniedopytovania tabuliek. Existujú dva hlavné typyPodrobný opis tabu¾ky sysindexes z Books Onlineindexov: klastrované a neklastrované indexy. Priklastrovaných indexoch ide o fyzické preusporiadaniedát <strong>na</strong> dátových stránkach. Okrem toho sa vytvárajúaj indexové stránky umoòujúce rýchly traverzpri vyh¾adávaní dát. Inými slovami, ak vytvorímeklastrovaný index <strong>na</strong> ståpci PRIEZVISKO v tabu¾keZákazníci, všetky záz<strong>na</strong>my <strong>na</strong> dátovýchstránkach sa <strong>na</strong>èítajú niekam i<strong>na</strong>m (<strong>na</strong>pr. do databázytempdb) a následne sa usporiadajú <strong>na</strong> dátovýchstránkach vzostupne od A do Z pod¾a priezvi<strong>sk</strong>azákazníka (samozrejme, závisí to od <strong>na</strong>staveniaz<strong>na</strong>kovej súpravy a usporiadania <strong>na</strong> SQLServeri). Okrem toho sa vytvorí záz<strong>na</strong>m v tabu¾kesysindexes pre daný index.Zatia¾ postaèí, ak sa zameriame len <strong>na</strong> vybranépolia tabu¾ky sysindexes, ktoré nám o danom indexepovedia viac. Dôleitý je ståpec indid, ktorý definujespôsob uloenia dát. 0 z<strong>na</strong>mená nezoradenúkopu dát èie heap, 1 je vyhradená pre klastrovanýindex, 2 a 254 je neklastrovaný index a 255 je hodnotapri tabu¾kách obsahujúcich dátový typ textalebo image. Pre predchádzajúci príklad teda platíto, e sa upraví záz<strong>na</strong>m pre tabu¾ku Zákaznícia v poli indid bude 1. Zároveò sa zmení aj pole root,ktoré bude ako pointer ukazova <strong>na</strong> miesto, kde sa<strong>na</strong>chádza koreòová úroveò indexu. Z koreòa vychádzajúmedziúrovne a <strong>na</strong>koniec konèí <strong>na</strong> listovejColumn <strong>na</strong>me Data type Descriptionid int ID of table (for indid = 0 or 255). Otherwise, ID of table to which the index belongs.status int Inter<strong>na</strong>l system−status information.first bi<strong>na</strong>ry(6) Pointer to the first or root page.indid smallint ID of index:1 = clustered index>1 = Nonclustered255 = Entry for tables that have text or image dataroot bi<strong>na</strong>ry(6) For indid >= 1 and < 255, root is the pointer to the root page. For indid = 0 or indid =255, root is the pointer to the last page.minlen smallint Minimum size of a row.keycnt smallint Number of keys.groupid smallint Filegroup ID on which the object was created.dpages int For indid = 0 or indid = 1, dpages is the count of data pages used. For indid = 255, itis set to 0. Otherwise, it is the count of index pages used.reserved int For indid = 0 or indid = 1, reserved is the count of pages allocated for all indexes andtable data. For indid = 255, reserved is a count of the pages allocated for text or imagedata. Otherwise, it is the count of pages allocated for the index.used int For indid = 0 or indid = 1, used is the count of the total pages used for all index andtable data. For indid = 255, used is a count of the pages used for text or image data.Otherwise, it is the count of pages used for the index.rowcnt bigint Data−level rowcount based on indid = 0 and indid = 1. For indid = 255, rowcnt is setto 0.rowmodctr int Counts the total number of inserted, deleted, or updated rows since the last time statisticswere updated for the table.xmaxlen smallint Maximum size of a row.maxirow smallint Maximum size of a nonleaf index row.OrigFillFactor tinyint Origi<strong>na</strong>l fillfactor value used when the index was created. This value is not maintained;however, it can be helpful if you need to re−create an index and do not remember whatfillfactor was used.reserved1 tinyint Reserved.reserved2intReserved.FirstIAM bi<strong>na</strong>ry(6) Reserved.impid smallint Reserved. Index implementation flag.lockflags smallint Used to constrain the considered lock granularities for an index. For example, a lookuptable that is essentially read−only could be set up to do only table level locking to minimizelocking cost.pgmodctr int Reserved.keys varbi<strong>na</strong>ry(816) List of the column IDs of the columns that make up the index key.<strong>na</strong>me sys<strong>na</strong>me Name of table (for indid = 0 or 255). Otherwise, <strong>na</strong>me of index.statblob image Statistics BLOB.maxlen int Reserved.rows int Data−level rowcount based on indid = 0 and indid = 1, and the value is repeated forindid >1. For indid = 255, rows is set to 0. Provided for backward compatibility.128 PC REVUE 2/<strong>2004</strong>

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!