ebooksgratis.com

See also ebooksgratis.com: no banners, no cookies, totally FREE.

CLASSICISTRANIERI HOME PAGE - YOUTUBE CHANNEL
Privacy Policy Cookie Policy Terms and Conditions
Index (databáze) - Wikipedie, otevřená encyklopedie

Index (databáze)

Z Wikipedie, otevřené encyklopedie

INDEX (někdy též označovaný jako klíč - KEY) je databázová entita, sloužící ke zrychlení vyhledávacích a dotazovacích procesů v databázi, definování unikátní hodnoty sloupce tabulky nebo optimalizaci full-textového vyhledávání.

Obsah

[editovat] Databázové indexy

[editovat] Definice indexu

Index je obvykle definován výběrem tabulky a jeho konkrétního sloupce (nebo více sloupců), nad kterými si analytik nebo designér databáze přeje dotazování urychlit; dále pak technickým určením datového typu a typu indexu. Chování a způsoby uložení indexů se mohou významně i výrazně lišit podle použité databázové technologie.

Výjimku mohou tvořit například full-textové indexy, které jsou v některých případech (nerelační databáze typu Lotus Notes) definovány nad celou databází, nikoliv nad konkrétní tabulkou.

Vytvoření indexu způsobí (většinou nijak závažné) zvýšení nároků databázového serveru na operační paměť a diskový prostor (o vyhledávací tabulky, pokud se ukládají ve formě souboru). Velikost samotných dat to ale neovlivní. Například, při importu dat (exportovaných z databáze na jiném počítači), cílový databázový server po vytvoření tabulky s příslušnými indexy pro ně inicializuje potřebnou paměť (a diskový prostor) a během importu bude krom samotných dat průběžně aktualizovat i vyhledávací a jiné tabulky pro indexy. Jinými slovy, pomocná data indexů se při migraci dat nepřenášejí.

[editovat] Funkce indexu

Vytvořením indexu (například příslušným příkazem jazyku SQL - CREATE) databázový server (též zvaný Systém řízení báze dat - SŘBD) zarezervuje pro požadovaný index určitou část paměťového prostoru a uloží do něj informace o rozmístění hodnot indexovaných sloupců v tabulce (obvykle ve strojové a pro člověka nečitelné podobě, která závisí na použitých vnitřních algoritmech indexace). Pokud později dojde k dotazu (například pomocí příkazu SELECT nebo použitím pohledu), který se týká indexovaných sloupců, není tabulka prohledávána podle toho, jak jsou za sebou řádky uloženy, ale pomocí informací uložených v paměťovém prostoru indexu je přistupováno přímo k relevantním řádkům tabulky - dalo by se říct, že index funguje trochu podobně jako rejstřík v knize, kde místo odkazu na příslušnou stránky knihy je ukazatel na paměťové místo s kýženými daty.

[editovat] Použití indexu

Na první pohled by se mohlo zdát, že čím víc indexů, tím lepší chování databáze a že po vytvoření indexů pro všechny sloupce všech tabulkách dosáhneme maximálního zrychlení. Tento přístup naráží bohužel na dva zásadní problémy:

  1. Každý index zabírá v paměti vyhrazené pro databázi nezanedbatelné množství místa (vzhledem k paměti vyhrazené pro tabulku). Při existenci mnoha indexů se může stát, že paměť zabraná pro jejich chod je skoro stejně velká, jako paměť zabraná jejími daty - zvláště u rozsáhlých tabulek (typu faktových tabulek v datovém skladu) může něco takového být nepřijatelné.
  2. Každý index zpomaluje operace, které mění obsah indexovaných sloupců (například SQL příkazy UPDATE, INSERT). To je dáno tím, že databáze se v případě takové operace nad indexovaným sloupcem musí postarat nejen o změny v datech tabulky, ale i o změny v datech indexu.

Pro správné zvolení indexů by ten, kdo databázi navrhuje, měl vědět, jak často se vybírané záznamy z dané tabulky třídí podle zamýšleného sloupce (a kandidáta na index) a nakolik je důležité, aby vyhledávání a třídění podle něj bylo rychlé. U některých tabulek, které jsou např. číselníky o stálém počtu položek, řekněme max. několika desítkách, nemusí být třeba index definovat vůbec.

Příklad definice klíčů v jazyku SQL
CREATE TABLE `diskuzni_forum`(
 `id` int(8) NOT NULL auto_increment,
 `jmeno` varchar (30) NOT NULL,
 `email` varchar (30) NOT NULL,
 `prispevek` mediumtext NOT NULL,
 `cas_pridani` datetime NOT NULL,
 PRIMARY KEY  (`id`),
 INDEX (`cas_pridani`)
)

Červený řádek dělá ze sloupce id primární klíč; zelený řádek povyšuje sloupec cas_pridani na (standardní) index - hledání a třídění podle něj bude od této chvíle optimalizováno databázovým serverem.

[editovat] Typy indexů

Databázové indexy (indexsekvenční moduly) mívají svůj typ, který blíže určuje, jakým způsobem má být přístup k primárním datům příslušné databázové tabulky optimalizován. Označení typů se může různit, ale nejčastěji se jedná o tyto hlavní typy:

  • PRIMARY - Tento primární index tvoří sloupec (nebo sloupce), které obsahují primární klíč (někdy označován také jako hlavní index). Jedná se o zvláštní typ, který se v každé tabulce může vyskytovat nejvýše jednou. Je definován sloupcem (sloupci) tabulky, který svou hodnotou jednoznačně identifikují každý záznam. Ve většině případů je dodržována zvyklost resp. existuje vžitá konvence tento sloupec nazvat ID (odvozeno od slova identifikovat) a jeho datový typ pak stanovit jako typ celočíselný (tedy typ INTEGER či SMALLINT, není-li třeba jinak - není to ale bezpodmínečně nutné). Databázový server musí být v tomto případě navržen tak, že není možné, aby do takto označeného sloupce (k němuž se tento primární index vztahuje) byla vložena duplicitní či multiplicitní hodnota klíče, tedy stejný klíč, který již v tabulce existuje resp. který již byl jednou vložen (takový pokus končí chybovým hlášením a zápisem do chybového logovacího souboru či do logovací tabulky). Klíč je tedy v tabulce unikátní, jedná se de facto o zvláštní případ typu klíče UNIQUE.
  • UNIQUE - Tento unikátní index je tvořen ze sloupců obsahujících unikátní klíč, jedná se o speciální typ indexu, který je významově podobný předchozímu typu PRIMARY co do jednoznačnosti záznamu podle unikátní hodnoty klíče (typ PRIMARY je pouze zvláštní případ typu UNIQUE, jedná se vlastně o podtyp) v databázové tabulce (ostatně, jak naznačuje i sám jeho název) a v praktickém dopadu, který to pak na práci s příslušnou databází má. Na rozdíl od předchozího typu však není index definován pouze pro jeden jediný sloupec, ale může být definován pro více sloupců tabulky. Podle účelu, ke kterému má tabulka sloužit, je vhodné definovat indexy složené z více sloupců téže tabulky - potom opět nelze vložit záznam s hodnotou klíče, který by již v této kombinaci někde v tabulce existoval respektive byl již dříve do tabulky vložen (situace opět vede k chybovému hlášení vypisovanému na standardní výstup a zápisu do chybového logovacího souboru či tabulky).
  • INDEX nebo také SECONDARY je tvořen záznamy, které obsahují sekundární klíč čili druhotný klíč (někdy bývá též označován jako vedlejší index). Definicí jednoho či více indexů tohoto typu bývá v tabulce zajištěna optimalizace vyhledávání podle jednoho či více sloupců, pro které jsou dané indexy definovány. Databázový server vytvoří a nadále udržuje vnitřní seznam odkazů na řádky tabulky, seřazený podle příslušných klíčových hodnot sloupce či sloupců (podle hodnot sekundárního klíče), k němuž je logicky vázán. Udržování takto seřazené posloupnosti urychluje vyhledávání záznamů v databázi (je možno použít některé matematické interpolační numerické metody), logické či fyzické řazení záznamů jakož i jiné další datové operace s tabulkou, které mohou být dále omezeny nějakou podmínkou pro vybranou podmnožinu záznamů z tabulky. Na rozdíl od předchozích typů PRIMARY a UNIQUE lze do tabulky vkládat záznamy, které nejsou unikátní resp. obsahují duplicitní či multiplicitní hodnoty klíče (v jenom i více sloupcích). U některých databázových systémů se může jednat i o sloupce tzv. fiktivní, tedy sloupce odvozené respektive vypočtené z hodnot sloupců fyzických resp. uložených.
  • FULL-TEXT - Vytvořením indexu tohoto typu se databázový server bude snažit optimalizovat full-textové vyhledávání v daném sloupci u dané tabulky. To, jakým způsobem to udělá, záleží na databázovém serveru samotném, průvodním jevem může být to, že na disku nebo v operační paměti bude udržovat například statistiku slov, které byly v tomto sloupci a tabulce zadány, nebo jiné pomocné hashovací funkce nebo vyhledávací tabulky.

[editovat] Speciální typy indexů

  • parciální index – je index, který spadá do jednoho z výše uvedených základních typů (v drtivé většině případů INDEX), který databázový stroj využívá pouze za určité podmínky. Tato podmínka většinou nějak omezuje hodnoty ostatních polí dané v tabulce a je součástí definice parciálního klíče. Parciální klíče mají jen některé databáze (např. PostgreSQL). Situace, kdy záznamy tabulky příliš nerovnoměrně spadají do jedné velké podskupiny, je příkladem a důvodem pro vytvoření parciálního indexu, který v této podkategorii (a pouze v ní) záznamy zindexuje.

[editovat] Odkazy

[editovat] Související články

[editovat] Externí odkazy


aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -