Index (databáze)

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

Databázové indexy

Definice indexu

Index je obvykle definován výběrem tabulky a jednoho 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 fulltextové 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í zvýšení nároků databázového serveru na operační paměť a diskový prostor (o vyhledávací struktury, pokud se ukládají ve formě souboru). Velikost samotných základních dat to ale neovlivní. Ovlivní se ale práce databáze. Například, při importu dat (exportovaných z databáze na jiném počítači) definuje cílový databázový server strukturu tabulek a indexů, inicializuje pro ně potřebnou paměť (a diskový prostor) a během importu bude krom samotných dat průběžně aktualizovat i struktury indexů. Jinými slovy, ukládání do db je zpomaleno těmito procesy(vytvoření indexu a zapsání), ale čtení je značně urychleno (právě díky indexům).

Funkce indexu

Vytvořením indexu (například příslušným příkazem jazyka SQLCREATE) 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ánku knihy je ukazatel na paměťové místo s kýženými daty.

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áží 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 (Toto platí pouze v případě, že načtení celé tabulky (full table scan) se provede za max. dvě operace čtení).

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ý (sedmý) řádek udělá nad sloupcem id primární klíč; zelený (osmý) řá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 strojem.

Druhy indexů

Databázové indexy (či indexsekvenční moduly) dělíme do různých druhů podle toho, co chceme při přístupech k primárním datům příslušné databázové tabulky optimalizovat. Označení druhů indexů se může různit, nejčastěji se používají tyto hlavní druhy:

PRIMARY

Související informace naleznete také v článku Primární klíč.

Tento primární index tvoří sloupec (nebo kombinace více sloupců), které obsahují primární klíč (někdy označován také jako hlavní index). Jedná se o zvláštní druh indexu, 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ů dnes 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 druhu klíče UNIQUE.

UNIQUE

Tento unikátní index je tvořen ze sloupců obsahujících unikátní klíč, jedná se o speciální druh 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 nemusí být unikátní index jediný, ale může být definováno více. Například kromě ID záznamu o osobě můžeme požadovat i unikátnost sloupce s loginovým jménem osoby. Jednotlivý index může být i složen z více sloupců. Například v tabulce o biologických druzích budeme potřebovat unikátnost kombinace druhového a rodového jména. 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

Index též zvaný SECONDARY je tvořen pro sloupce, 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 v tabulce zajišťujeme optimalizaci vyhledávání podle dalších sloupců, mimo primární nebo unikátní indexy. Databázový server vytvoří a nadále udržuje vnitřní konstrukci odkazů na řádky tabulky, jež poskytuje uspořádání podle příslušných hodnot ve sloupci, k němuž je index logicky vázán (podle hodnot sekundárního klíče). Udržování takto uspořádané konstrukce 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, jež se mají provést na podmnožině záznamů z tabulky vymezené podmínkou položenou na hodnoty v sekundárním klíči. Na rozdíl od předchozích indexů PRIMARY a UNIQUE lze do tabulky vkládat záznamy, které nejsou v sekundárním indexu unikátní. 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.

FULLTEXT

Vytvořením indexu tohoto typu se databázový server bude snažit optimalizovat fulltextové 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é hašovací funkce nebo vyhledávací tabulky.

Speciální druhy indexů

Parciální index

Parciální index je index, který spadá do jednoho z výše uvedených základních druhů (v drtivé většině případů INDEX), ale týká se jen určité podmnožiny řádků tabulky. Databázový stroj s ním pracuje jen za určité podmínky, tato podmínka se týká některých z ostatních polí v dané tabulce, tato podmínka 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 podskupině (a pouze v ní) záznamy zindexuje.

Kandidátní index

Související informace naleznete také v článku Kandidátní klíč.

Cizí index

Související informace naleznete také v článku Cizí klíč.

Funkční index

Funkční nebo též výrazový index pracuje (tj. porovnává, vyhledává, vytváří si interní pořadové tabulky) s prostou hodnotou sloupce, nad kterým je definován, ale nad funkční hodnotou na něj aplikovanou nebo i výrazem z nich složených. Pokud sledovaný výraz umožňuje použití i více sloupců z tabulky, lze pomocí něj nastavit i složitější chování přímo v databázovém stroji, například:

  • porovnávat nezávisle na velikosti písmen
CREATE INDEX test1_lower_col1_idx ON test1 (lower(col1));
  • třídit podle rozkódované hodnoty sloupce
CREATE INDEX test1_decode_col1_idx ON test1 (decode(col1));
  • nastavit index pouze podle prvních např. 2 písmen
CREATE INDEX test1_left2_col1_idx ON test1 (substr(col1,0,2));
  • nastavit unikátnost záznamu na základě shody dvou nebo více sloupců (například jména a příjmení)
CREATE INDEX full_name ON people ((first_name || ' ' || last_name));

V jiných databázích by se tato funkčnost provedla přiřazením sloupců, které mají dohromady být unikátní (v tomto případě first_name a last_name) do jednoho unikátního indexu. Podporuje-li databázový stroj funkční indexy s libovolným výrazem ze sloupců z dané tabulky, schopnost přiřadit více sloupců do jednoho indexu tím více než dostatečně supluje a objektivně se dá říci, že se jedná o flexibilnější řešení s většími možnostmi.

Funkčními indexy disponují například databáze PostgreSQL.

Odkazy

Související články

Externí odkazy

Read other articles:

Voce principale: Motore in corrente alternata. Rappresentazione del funzionamento di un motore sincrono Il motore sincrono è un tipo di motore elettrico in corrente alternata la cui velocità di rotazione è sincronizzata con la frequenza elettrica. Comunemente si tratta di motori con alimentazione trifase, ma i motori sincroni di piccola potenza sono spesso alimentati con la comune tensione monofase disponibile nelle abitazioni. Il motore sincrono è anche detto motore vettoriale o motore ...

 

 

Ratu Munawaroh Anggota Dewan Perwakilan Rakyat Republik IndonesiaMasa jabatan1 Oktober 2009 – 28 Juli 2010 PenggantiChairul Naim M. AnikGrup parlemenPartai Amanat NasionalDaerah pemilihanJambiMayoritas157.651 suara Informasi pribadiLahir30 Agustus 1977 (umur 46)Tasikmalaya, Jawa BaratPartai politikPAN (1998–2020)PDI-P (sejak 2020)Suami/istriZulkifli Nurdin ​ ​(m. 1997; meninggal 2018)​Anak2ProfesiPolitisiIbu Rumah TanggaSunting...

 

 

The Kings have played their home games at the Staples Center since 1999. The Los Angeles Kings are an American professional ice hockey team based in Los Angeles, California. They play in the Pacific Division of the Western Conference in the National Hockey League (NHL).[1] The team joined the NHL in 1967 as an expansion team with five other teams, and won their first Stanley Cup in 2012. Having first played at The Forum, the Kings have played their home games at the Staples Center si...

Chogyal Sikkim Bekas Kerajaan Segel Sikkim Chogyal Palden Thondup Namgyal Penguasa pertama Chogyal Phuntsog Namgyal Penguasa terakhir Chogyal Palden Thondup Namgyal Kediaman resmi Gangtok, Sikkim Pendirian 1642 Pembubaran 16 Mei 1975 Penuntut takhta Wangchuk Namgyal Chogyal (Raja-Raja Dharma, Tibet: ཆོས་རྒྱལ; Wylie: chos rgyal, Sanskerta: धर्मराज:) adalah penguasa monarki bekas kerajaan Sikkim dan Ladakh di India pada masa sekarang, yang diperintah oleh...

 

 

B

  此條目介紹的是拉丁字母中的第2个字母。关于其他用法,请见「B (消歧义)」。   提示:此条目页的主题不是希腊字母Β、西里尔字母В、Б、Ъ、Ь或德语字母ẞ、ß。 BB b(见下)用法書寫系統拉丁字母英文字母ISO基本拉丁字母(英语:ISO basic Latin alphabet)类型全音素文字相关所属語言拉丁语读音方法 [b][p][ɓ](适应变体)Unicode编码U+0042, U+0062字母顺位2数值 2歷史發...

 

 

Coppa del Mondo di salto con gli sci 2012 Uomini Donne Vincitori Generale Anders Bardal Sarah Hendrickson Torneo dei quattro trampolini Gregor Schlierenzauer - Volo Robert Kranjec - Torneo a squadre  Austria - Classifica per nazioni  Austria  Stati Uniti Dati manifestazione Tappe 19 9 Gare individuali 27 14 Gare a squadre 6 0 Gare cancellate 1 (individuale) 1 2011 2013 La Coppa del Mondo di salto con gli sci 2012, trentatreesima edizione della manifestazione organizzata dalla ...

ХристианствоБиблия Ветхий Завет Новый Завет Евангелие Десять заповедей Нагорная проповедь Апокрифы Бог, Троица Бог Отец Иисус Христос Святой Дух История христианства Апостолы Хронология христианства Раннее христианство Гностическое христианство Вселенские соборы Н...

 

 

Il Giudizio universale, affresco di Michelangelo nella Cappella Sistina La Basilica di San Pietro L'arte italiana si sviluppò nella penisola italica fin dalla preistoria. Durante l'Impero romano l'Italia fu al centro di una cultura artistica che per la prima volta creò un linguaggio universalmente omogeneo per il mondo europeo e mediterraneo. In alcuni periodi l'Italia fu il paese artisticamente più all'avanguardia d'Europa. Indice 1 Arte preistorica e protostorica 2 Magna Grecia 3 Etr...

 

 

NGC 3913   الكوكبة الدب الأكبر[1]  رمز الفهرس NGC 3913 (الفهرس العام الجديد)PGC 37024 (فهرس المجرات الرئيسية)2MASX J11503892+5521139 (Two Micron All-Sky Survey, Extended source catalogue)UGC 6813 (فهرس أوبسالا العام)IRAS 11480+5537 (IRAS)MCG+09-20-001 (فهرس المجرات الموروفولوجي)IC 740 (كتالوج مفهرس)SDSS J115038.93+552113.9 (مسح سلووان الرقمي للس�...

This article is about the town in Poland. For the Polish police force, see Policja and Law enforcement in Poland. This article includes a list of general references, but it lacks sufficient corresponding inline citations. Please help to improve this article by introducing more precise citations. (February 2010) (Learn how and when to remove this message) Place in West Pomeranian Voivodeship, PolandPoliceSaints Peter and Paul Gothic Church in Police-Jasienica FlagCoat of armsPoliceCoordinates:...

 

 

乔冠华 中华人民共和国外交部部长 中国人民对外友好协会顾问 任期1974年11月—1976年12月总理周恩来 → 华国锋前任姬鹏飞继任黄华 个人资料性别男出生(1913-03-28)1913年3月28日 中華民國江蘇省盐城县逝世1983年9月22日(1983歲—09—22)(70歲) 中华人民共和国北京市籍贯江蘇鹽城国籍 中华人民共和国政党 中国共产党配偶明仁(1940年病逝) 龚澎(1970年病逝) 章含�...

 

 

عسر ولادة الكتف Shoulder dystocia معلومات عامة الاختصاص طب التوليد  من أنواع عسر الولادة  الإدارة حالات مشابهة عرض الكتف  تعديل مصدري - تعديل   عسر ولادة الكتف هو حالة معينة من الولادة المتعسرة حيث تحدث بعد تسليم الرأس، الكتف الأمامي للرضيع لا يمكن أن يمر، يتطلب مساعده كب...

مجلس شؤون الأسرة البلد السعودية  المقر الرئيسي الرياض تاريخ التأسيس يوليو 2016 منطقة الخدمة السعودية الرئيس م. أحمد سليمان الراجحي (وزير العمل) الأمين العام د.هلا مزيد التويجري الموقع الرسمي مجلس شؤون الأسرة تعديل مصدري - تعديل   مجلس شؤون الأسرة هو مجلس تابع لوزارة الع�...

 

 

Orang DardGadis Kalasha dengan pakaian tradisionalDaerah dengan populasi signifikanPakistan Utara (Gilgit-Baltistan, Khyber Pakhtunkhwa)Barat laut India (Jammu dan Kashmir, Ladakh)Timur AfganistanBahasaBahasa-bahasa DardikAgamaSebagian besar: Islam (Sunni, Syiah dan Sufi Noorbakhshia)[1]Minoritas: Hinduisme,[2] Hinduisme Kuno/Animisme (suku Kalash)[3]Kelompok etnik terkaitSuku-suku Indo-Arya lainnya Orang Dard adalah salah satu kelompok bangsa Indo-Arya yang banyak dit...

 

 

Copenhagen metro station Skjolds PladsCopenhagen Metro StationSkjolds Plads station entranceGeneral informationLocationHaraldsgade, 2200 Copenhagen NCoordinates55°42′11.7″N 12°32′52.4″E / 55.703250°N 12.547889°E / 55.703250; 12.547889Owned byMetroselskabetLine(s)City Circle Line (M3)Platforms1 island platformTracks2Bus routes 6AConstructionStructure typeUndergroundAccessibleYesOther informationStation codeSkpFare zone2[1]WebsiteCopenhagen Metro - Sk...

Not to be confused with Roxelana.The Roman empire under Hadrian (ruled 117–138), showing the location of the Roxolani Sarmatians in the Wallachian plain (Romania) The Roxolani or Rhoxolāni (Ancient Greek: Ροξολανοι Rhoxolānoi, Ρωξολανοι Rhōxolānoi; Latin: Rhoxolānī) were a Sarmatian people documented between the 2nd century BC and the 4th century AD, first east of the Borysthenes (Dnieper) on the coast of Lake Maeotis (Sea of Azov), and later near the borders of Roma...

 

 

Городской уезд в составе ЛяоянаДэнтакит. упр. 灯塔, пиньинь Dēngtǎ 41°25′25″ с. ш. 123°19′13″ в. д.HGЯO Страна  Китай Провинция Ляонин Городской округ Ляоян История и география Площадь 1170,3 км² Высота 44 ± 1 м Часовой пояс UTC+8:00 Население Население 496 122 чел. (201...

 

 

Swedish football referee (born 1971) For the skier born 1975, see Martin Hansson (skier). Not to be confused with Martin Hanson or Martin Hansen. Martin Hansson Hansson in 2010Born (1971-04-06) 6 April 1971 (age 53)Holmsjö, SwedenOther occupation Full-time refereeFirefighterDomesticYears League Role1996–2013 Superettan Referee1999–2013 Allsvenskan RefereeInternationalYears League Role2001–2014 FIFA listed Referee Martin Hansson (born 6 April 1971) is a Swedish former football refe...

 MR8 Stasiun Monorel Bukit NanasStasiun Monorel Rute KL Sentral-TitiwangsaLokasiJalan Sultan Ismail, berhampiran persimpangan Jalan Sultan Ismail-Jalan Ampang, berhampiran Bukit Nanas, Kuala Lumpur, Malaysia.Koordinat3°9′22″N 101°42′16″E / 3.15611°N 101.70444°E / 3.15611; 101.70444PemilikKL Infrastructure Group Limited (KL Infra)JalurKuala Lumpur Monorail (2003 – kini)Jumlah peron2 platform sisiJumlah jalur2KonstruksiParkirNoneOperasi layanan St...

 

 

Краом Высшая точка Абсолютная высота140 м Расположение 13°17′09″ с. ш. 103°48′44″ в. д.HGЯO Страна Камбоджа Краом Медиафайлы на Викискладе Краом[1] (Пном Кром) (кхмер. ភ្នំក្រោម) — гора высотой 140 метров в окрестностях Сиемреапа, Камбоджа. Содержание ...