Přehled Co je to jeden index a co je to složený index? Kdy vytvořit nový složený index a na co bych měl v kompozitním indexu věnovat pozornost? Tento článek je především shrnutím některých diskuzí na internetu.
Jedna. Koncept
Jeden index je situace, kdy je index uveden v jednom sloupci, tedy příkaz k vytvoření nového indexu je implementován pouze v jednom sloupci.
Uživatelé mohou vytvářet indexy na více sloupcích, které se nazývají kompozitní indexy (kombinované indexy). Kompozitní indexy se vytvářejí přesně stejným způsobem jako jednotlivé indexy. Složené indexy však vyžadují menší režie při provozu databáze a mohou nahradit více jednotlivých indexů. Pokud je počet řádků v tabulce mnohem větší než počet klíčů, tato metoda může výrazně urychlit rychlost dotazování tabulky.
Existují dva koncepty současně, úzké indexy a široké indexy, úzké indexy označují indexy s 1–2 sloupci a obecně označují jeden index, pokud není uvedeno jinak. Široký index je index s více než 2 sloupci.
Důležitým principem návrhu indexů je používat úzké indexy místo širokých, protože úzké indexy bývají efektivnější než kombinované. Užší indexy dávají optimalizátoru větší výběr, což často pomáhá zlepšit výkon.
Dva. Použití
Vytvořte index Vytvořte index IDX1 v tabulce 1(sloupec,sloupec,sloupec,sloupec,sloupec) Informovat se vyberte * z tabulky1, kde sloupec1= A a sloupec2= B a sloupec3 = C
V tuto chvíli optimalizátor dotazů neprovádí tabulku, ale přímo přijímá data z indexu, protože tato data jsou v indexu, což se nazývá overlay dotaz, a rychlost dotazu je velmi vysoká.
Tři. Poznámky:
1. Kdy použít složený index Za podmínky kde je pole indexováno, a pokud je použito více polí, používá se složený index. Obecně nevytvářejte žádné indexy v poli select (pokud chcete dotazovat select st.1, st.2, stĺpce, stlácové sloupce 3 z mytable, výše uvedený index nepotřebujete). Indexace na základě podmínek je nesmírně důležitý princip. Dávejte pozor, abyste nepoužívali příliš mnoho indexů, jinak to výrazně ovlivní efektivitu aktualizací tabulek, protože při operačních tabulkách musíte věnovat hodně času vytváření indexů.
2. Pro složené indexy je při použití dotazu nejlepší postupovat podle pořadí hledání indexů, které je nejefektivnější. Například: IDX1:create index idx1 na table1(col2,col3,col5) vyberte * z tabulky1, kde col2=A a col3=B a col5=D
Pokud je to "vybrat * z tabulky1, kde col3=B a col2=A a col5=D" Nebo "vybrat * z tabulky1, kde sloupek 3=B" nepoužije index, nebo efekt není znatelný
3. Nahradí kompozitní index jeden index? Mnoho lidí si myslí, že přidání libovolného pole do shlukovaného indexu může zlepšit rychlost dotazů, ale někteří jsou zmatení: Pokud jsou složená shlukovaná indexová pole dotazována zvlášť, zpomalí se rychlost dotazu? S touto otázkou se podívejme na následující rychlost dotazu (výsledná sada je 250 000 dat) :( datový sloupec fariqi je na prvním místě v počátečním sloupci indexu kompozitní agregace a uživatelské jméno neibuyonghu je druhý.
IDX1:create index idx1 on Tgongwen(fariqi,neibuyonghu)
(1) Vyberte gid, fariqi, neibuyonghu, titul od Tgongwena Kde Fariqi>'2004-5-5'
Rychlost dotazu: 2513 ms
(2) Vyberte gid, fariqi, neibuyonghu, titul od Tgongwena kde fariqi>'2004-5-5' a neibuyonghu='kancelář'
Rychlost dotazu: 2516 ms
(3) Vyberte gid, fariqi, neibuyonghu, titul od Tgongwena kde neibuyonghu='kancelář'
Rychlost dotazu: 60280 milisekund
Z výše uvedených experimentů vidíme, že pokud je jako podmínka dotazu použit pouze počáteční sloupec shlukovaného indexu, rychlost dotazu všech sloupců s kompozitním shlukovaným indexem je téměř stejná, dokonce o něco vyšší než při použití všech složených indexových sloupců (když je počet sad výsledků dotazů stejný). Pokud jsou jako dotazovací podmínky použity pouze ne-počáteční sloupce složeného agregovaného indexu, tento index nic neudělá. Samozřejmě, rychlost dotazu u příkazů 1 a 2 je stejná, protože počet položek v dotazu je stejný; pokud jsou použity všechny sloupce složeného indexu a výsledků dotazu je málo, vznikne "indexový přepis", což umožní optimalizaci výkonu. Mějte také na paměti, že ať už často používáte jiné sloupce v agregovaném indexu, nebo ne, vedoucí sloupec musí být ten, který se používá nejčastěji.
[Ref: Schéma algoritmu optimalizace dotazů a stránkování http://blog.csdn.net/chiefsailor/archive/2007/05/28/1628339.aspx]
4. Musím vytvořit jeden a složený index ve stejném sloupci současně? Experiment: Sysbase 5.0 tabulka tabulka1 pole: sloupec 1, sloupec 2, sloupec 3
Testovací kroky: (1) Vytvořte index idx1 na sloupci 1 Proveďte select * z tabulky1, kde sloupec=A používá idx1 Proveďte select * z tabulky1, kde kol1=A a sloupec2=B také používají idx1
(2) Smažte index idx1 a poté vytvořte idx2 na (sloupec,sloupec,2) složený index Oba dotazy používají idx2
(3) Pokud existují oba indexy idx1 a idx2 Není to tam, kde col1='A' používá idx1; kde col1=A a col2=B používá idx2. Jeho optimalizátor dotazů využívá jeden z dříve běžně používaných indexů. Buď použij idx1 nebo idx2.
Je vidět, že (1) Pro tabulku, pokud existuje složený index na (sloupec 1, sloupec 2), není nutné vytvářet současně jeden index na sloupce 1. (2) Pokud to vyžadují podmínky dotazu, můžete přidat složený index na (stárce 1, stláceň 2), když už existuje jeden index na sloupce 1, což může do určité míry zvýšit efektivitu. (3) Není příliš mnoho výhod v tom, že by byl složený index s více poli (obsahujícími 5 nebo 6 polí) současně, relativně vzato, vytvoření indexu s více úzkými poli (obsahujícím pouze jedno, maximálně 2 pole) může dosáhnout lepší efektivity a flexibility.
5. Musím pokrýt dotaz? Obecně je nejlepší nepoužívat strategii, která klade důraz na plné pokrytí dotazů. Pokud jsou všechny sloupce v klauzuli Select přepsány indexem bez clusteru, optimalizátor to rozpozná a zajistí dobrý výkon. To však často vede k příliš širokému indexu a přílišné závislosti na pravděpodobnosti, že optimalizátor politiku použije. Obvykle se úzké indexy používají pro větší počet dotazů, což zajišťuje lepší výkon u velkých dotazů. |