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 Eindex. Potom kontroluje záz<strong>na</strong>m v ståpci root, ktorýje definovaný dátovým typom binárnym a obsahujeúdaj o umiestnení koreòovej stránky klastrovanéhoindexu. Ak ju lokalizuje, zaène porovnávah¾adanú hodnotu, v <strong>na</strong>šom prípade je to èíslo 1587.SQL ju h¾adá <strong>na</strong>jprv <strong>na</strong> koreòovej stránke, ak tamnie je, postupuje o úroveò nišie, a to <strong>na</strong> základeprepojenia indexových stránok. Tentoraz nemusíís pri lokalizácii nového extentu alebo stránky <strong>na</strong>FirstIAM (pozera do mapy), ale ide priamo a <strong>na</strong>h¾adaný údaj. Pri takomto <strong>sk</strong>ene je niší poèet <strong>sk</strong>enovanýchstránok a tým aj operácií I/O <strong>na</strong> di<strong>sk</strong>ovomsubsystéme. Ilustráciou je obrázok è. 5 a takistoaj exekuèný plán, ktorý sa zobrazí v aplikáciiQuery A<strong>na</strong>lyzer po príkaze:USE NorthwindSELECT * FROM dbo.[Order Details]Pomocou príkazu SET STATISTICS IO ON môemezisti poèet <strong>sk</strong>enovaných dátových stránok. Pri absenciiindexu sa ich poèet výrazne zvýši. Klastrovanýindex by sa dal prirov<strong>na</strong> aj k slovníku. Tak akosú v slovníku objekty (slová) zoraïované pod¾aabecedy, aj riadky v tabu¾ke <strong>na</strong> SQL Serveri sú zoraïovanépod¾a po-¾a, <strong>na</strong>d ktorým je indexvytvorený. H¾adaniev slovníku jetriviálne. Ak h¾adámeslovo cluster, ve¾mirýchlo vyberiemestranu, kde saslovo <strong>na</strong>chádza, a<strong>na</strong> tejto strane hovyh¾adáme – „pre<strong>sk</strong>enujeme“ju. Kebyvšak klastrovanýindex chýbal, boloby takmer nemonévyh¾ada všetky vý<strong>sk</strong>ytyslova cluster.K tejto asociácii saešte vrátime prineklastrovanom obr. 6indexe.Vráme sa k a<strong>na</strong>lógii vyh¾adávania konkrétnehomiesta v neznámom meste. Tu je <strong>na</strong>jpriliehavejšieprirov<strong>na</strong>nie k <strong>sk</strong>úsenému turistovi s mapou. Kým prištruktúre HEAP musel blúdiaci neustále <strong>na</strong>zera domapy a blúdi po uliciach, v neklastrovanom indexesa turistovi staèí raz pozrie do mapy a <strong>na</strong> prvýkrátnájde miesto urèenia. Ak teda h¾adáme záz<strong>na</strong>mzamest<strong>na</strong>nca 1587, SQL <strong>na</strong>jprv kontroluje sysindexes,kde zistí hodnotu väèšiu ako 1. Na základe údajav poli root vyh¾adá koreò neklastrovaného indexua zaène preh¾adáva indexové stránky a hodnoty <strong>na</strong>nich porovnáva s èíslom 1587. Po tom, èo príde <strong>na</strong>listovú úroveò indexových stránok, nájde pri hodnote1587 pointer. Ten ho odkazuje <strong>na</strong> konkrétnyextent, konkrétny súbor a definuje aj konkrétnyzáz<strong>na</strong>m. Vyh¾adanie je teda jednoduché aj vtedy, aksamotné dátové stránky nie sú usporiadané (neklastrovanýindex <strong>na</strong> heape). Keby bol v tejto tabu¾kevytvorený aj klastrovaný index (<strong>na</strong>pr. <strong>na</strong>d po¾omPriezvi<strong>sk</strong>o), <strong>na</strong>miesto èíselného pointera by sa tu <strong>na</strong>chádzalúdaj (èie priezvi<strong>sk</strong>o zamest<strong>na</strong>nca è. 1587).Problém by vznikol vtedy, keby výsledok dopytupozostával z viacerých záz<strong>na</strong>mov. H¾adajme zamest<strong>na</strong>ncovod èísla 25 po 1587. Turista by musel pozerado mapy vdy práve raz pre kadé h¾adané miesto.SQL server sa teda musí pre kadý záz<strong>na</strong>m vráti<strong>na</strong> indexové stránky neklastrovaného indexu. Prerozsahy dát teda tento spôsob indexovania nie jeefektívny (obr. 6).INDEXOVANÉ POH¼ADYAby boli indexy úèinné, musia by dobre <strong>na</strong>vrhnuté.Výz<strong>na</strong>mným pomocníkom je sprievodca IndexTuning Wizard. Pomocou tohto sprievodcu dokáe<strong>sk</strong>úsený databázový administrátor definova optimálnuštruktúru indexov <strong>na</strong>d tabu¾kami. Dobre<strong>na</strong>vrhnuté indexy vytvoria predpoklady <strong>na</strong> maximálnyvýkon servera nielen pri èítaní, ale aj pri zápisedát. Niekedy však databázové aplikácie vykonávajúdopytovanie poh¾adov, ktoré sú vytvorené <strong>na</strong>dtabu¾kami. Poh¾ady však nie sú fyzické dáta a ne<strong>na</strong>chádzajúsa <strong>na</strong> dátových ani indexových stránkach.Jediné, èo je uloené <strong>na</strong> databázovom serveri, jedefinícia poh¾adu. SQL teda vdy pri vykonávanídopytu <strong>na</strong>d poh¾adom kontroluje jeho definíciu apotom vykoná dopyt <strong>na</strong>d podliehajúcimi tabu¾kami.Aj v tomto prípade SQL vyuíva indexovú štruktúru.Poh¾ady sú „virtuálne dáta“, t. j. okrem vlastnýchdát obsahujú aj vypoèítané ståpce alebo sú spojeniamiviacerých tabuliek (klauzulou JOIN). Dopyty <strong>na</strong>dnimi sa budú pouívate¾om zda relatívne pomalé.Microsoft SQL Server od verzie 2000, ale len v edíciiENTERPRISE ponúka monos indexova aj poh¾ady.Základný zmysel indexovania poh¾adov je v urýchlenídopytovania cez poh¾ady a <strong>na</strong>vyše dáva SQLServeru monos vyuíva vypoèítané dáta, ktoré sauloia <strong>na</strong> indexové stránky. Ak je <strong>na</strong>príklad pri dopytenevyhnutné vráti pouívate¾ovi vypoèítané ståpcedát, SQL musí pri kadom (!) takomto úkone dátareálne vypoèítava. Keby sme však mali indexovanýpoh¾ad, ktorý takéto dáta obsahuje, SQL si ich jednoducho„stiahne“ z indexových stránok. Dá sa tedapoveda, e za urèitých okolností indexovaniepoh¾adov z<strong>na</strong>ène zvyšuje výkon databázového servera.Všimnime si podmienky, ktoré treba dodra privytváraní indexu <strong>na</strong>d poh¾admi. Je potrebné dodra<strong>na</strong>stavenia spojenia (session settings) pri vytváranípoh¾adu, pri vykonávaní príkazov INSERT,UPDATE a DELETE a pri samotnom pouívaní poh¾aduQuery Optimizer komponentom.Okrem toho musí poh¾ad spåòa <strong>na</strong>sledujúce podmienky: parameter WITH SCHEMABINDING je povinný referencia je povolená len k tabu¾kám tej istejdatabázy klauzula GROUP BY nesmie obsahova HAVING,CUBE alebo ROLLUP klauzula OUTER JOIN je zakázaná klauzula UNION je zakázaná klauzula DISTINCT alebo TOP je zakázaná funkcia ROWSET (<strong>na</strong>pr. OPENROWSET) je zakázaná delené tabu¾ky alebo poddopyty sú zakázané ANSI_NULLS a QUOTED_IDENTIFIER sú pri vytváranív polohe ONNastavenia spojenia Musí by Východi<strong>sk</strong>ováhodnotaANSI_NULLS ON OFFANSI_PADDING ON ONANSI_WARNING ON OFFARITHABORT ON OFFCONCAT_NULL_YEILDS_NULL ON OFFNUMERIC_ROUNDABORT OFF OFFQUOTED_IDENTIFIER ON OFFVýhody pouitia indexovaných poh¾adov simôeme ilustrova <strong>na</strong> dopyte, ktorý bude zí<strong>sk</strong>avainformácie o poète dodávate¾ov v databázeNorthwind.USE NorthwindSELECT s.CompanyName,COUNT_BIG(*) AS COUNTFROM Orders o INNER JOIN Shippers sON o.ShipVia=s.ShipperIDGROUP BY CompanyNamePomocou príkazu SET SHOWPLAN_ALL ON mô-eme ilustrova, ako dopyt pristupuje k dátam.Rozdiel bude zjavný, ak si vytvoríme poh¾ad a ten„oindexujeme“. Index vytvorený <strong>na</strong>d týmto poh¾adomsa bude vyuíva tak pri uvedenom dopyte,ako aj pri dopytovaní poh¾adu.Na záver uveïme <strong>sk</strong>ript potrebný <strong>na</strong> vytvoreniespomí<strong>na</strong>ného poh¾adu:SET QUOTED_IDENTIFIER ONGOCREATE VIEW ShipVwWITH SCHEMABINDINGASSELECT s.CompanyName,COUNT_BIG(*) AS COUNTFROM dbo.Orders o INNER JOIN dbo.Shippers sON o.ShipVia=s.ShipperIDGROUP BY CompanyNameNad týmto poh¾adom potom mono vytvára klastrovanýindex:CREATE UNIQUE CLUSTERED INDEX sch_idx_vwON ShipVw(CompanyName)Peter Gallo130 PC REVUE 2/<strong>2004</strong>

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

Saved successfully!

Ooh no, something went wrong!