Áttekintés Mi az egyetlen index, és mi az összetett index? Mikor kell új összetett indexet létrehozni, és mire kell figyelnem az összetett indexben? Ez a cikk főként néhány internetes beszélgetés összefoglalása.
Egy. Koncepció
Az egyetlen index olyan helyzet, amikor az index egy oszlopban van felsorolva, vagyis az új index létrehozásának állítása csak egy oszlopban van megvalósítva.
A felhasználók több oszlopon is létrehozhatnak indexeket, amelyeket összetett indexeknek (kombinált indexeknek) neveznek. Az összetett indexeket pontosan ugyanúgy hozták létre, mint az egyes indexeket. De az összetett indexek kevesebb többletterhelést igényelnek az adatbázis-műveletek során, és több egyedi indexet is kiválthatnak. Ha a táblázatban lévő sorok száma sokkal nagyobb, mint a billentyűk száma, ez a módszer jelentősen felgyorsíthatja a táblázat lekérdezési sebességét.
Két fogalom létezik egyszerre: szűk és széles indexek, a keskeny indexek 1-2 oszlopos indexeket jelölnek, és általában egyetlen indexre utalnak, hacsak nem más módon jelölik. A széles index olyan index, amely több mint 2 oszlopból áll.
Az indextervezés egyik fontos elve, hogy szűk indexeket használunk a széles indexek helyett, mert a szűk indexek általában hatékonyabbak, mint a kombinált indexek. A szűkebb indexek több választási lehetőséget adnak az optimalizálónak, ami gyakran javítja a teljesítményt.
Kettő. Használat
Hozz létre egy indexet Hozd létre IDX1 indexet a table1-en (col1, col2, col3) Érdeklődik válasszuk * az 1. táblázatból, ahol col1= A és col2= B és col3 = C
Jelenleg a lekérdezésoptimalizáló nem a táblát szkennelje, hanem közvetlenül az indexből veszi fel az adatokat, mert az indexben van ilyen adat, amit átfedő lekérdezésnek hívnak, és a lekérdezési sebesség nagyon gyors.
Három. Megjegyzések:
1. Mikor kell vegyületindexet használni A where feltételben a mezőt indexeljük, és ha több mezőt használnak, akkor összetett indexet alkalmazunk. Általában ne építs indexeket a kiválasztó mezőben (ha a mytable-ból szeretnél kiválasztani col1, col2, col3 lekérdezést, nincs szükség a fenti indexre). Az indexelés a feltételek alapján rendkívül fontos elv. Légy óvatos, hogy ne használj túl sok indexet, különben ez nagy hatással lesz a táblázatfrissítések hatékonyságára, mert sok időt kell az indexek létrehozására fordítani a táblázatok működtetésekor.
2. Kompozit indexek esetén, lekérdezés esetén a legjobb az indexek keresésének sorrendjét követni, amely a leghatékonyabb. Például: IDX1:hozzon létre indexet idx1 táblán (col2,col3,col5) válassz * az 1. táblázatból, ahol col2=A és col3=B és col5=D
Ha "válassz * az 1-es táblázatból, ahol col3=B és col2=A és col5=D" Vagy "válassz * az 1-es táblázatból, ahol col3=B" nem használja az indexet, vagy a hatás nem észrevehető
3. Egy összetett index helyettesíti az egyetlen indexet? Sokan úgy gondolják, hogy bármely mező hozzáadása a klaszterezett indexhez javíthatja a lekérdezési sebességet, de sokan zavarosak: Ha a komplex klaszterelt indexmezőket külön lekérdezik, lelassul-e a lekérdezési sebesség? Ezzel a kérdéssel nézzük meg a következő lekérdezési sebességet (az eredmény 250 000 adatdarab), :( dátumoszlop Fariqi az összetett aggregációs index kezdő oszlopában az első helyen áll, a neibuyonghu felhasználónév pedig a második helyen)
IDX1:create index idx1 on Tgongwen(fariqi,neibuyonghu)
(1) Válassz Gid, Fariqi, Neibuyonghu címet Tgongwentől hol Fariqi>'2004-5-5'
Lekérdezési sebesség: 2513 ms
(2) Válassz Gid, Fariqi, Neibuyonghu címet a Tgongwentől ahol Fariqi>'2004-5-5' és neibuyonghu='hivatal'
Lekérdezési sebesség: 2516 ms
(3) Válasszon Gid, Fariqi, Neibuyonghu címet Tgongwentől ahol neibuyonghu='hivatal'
Lekérdezési sebesség: 60280 milliszekundum
A fenti kísérletekből láthatjuk, hogy ha csak a klaszterezett index kezdőoszlopát használják lekérdezési feltételként, akkor az összetett klaszterelt indexszel rendelkező összes oszlop lekérdezési sebessége szinte ugyanaz, még valamivel gyorsabb, mint az összes összetett indexoszlop használata (ha a lekérdezési eredményhalmazok száma ugyanaz). Ha csak a összetett aggregált index nem kezdő oszlopait használják lekérdezési feltételekként, ez az index semmit sem fog tenni. Természetesen az 1. és 2. utasítások lekérdezési sebessége ugyanaz, mert a lekérdezésben lévő bejegyzések száma megegyezik; ha az összetett index összes oszlopát használják, és a lekérdezési eredmények kevések, akkor ez egy "index felülírást" alkot, így a teljesítmény optimalizálható. Ne feledd, hogy akár használsz más oszlopokat az aggregált indexben, akár nem, az első oszlopnak kell a leggyakrabban használni.
[Hivatkozás: Lekérdezésoptimalizálás és lapozási algoritmus séma http://blog.csdn.net/chiefsailor/archive/2007/05/28/1628339.aspx]
4. Egyszerre kell létrehoznom egyetlen indexet és egy összetett indexet ugyanabban az oszlopban? Kísérlet: Sysbase 5.0 tábla 1 mező: col1, col2, col3
Tesztlépések: (1) Hozza létre az idx1 indexet az col1-en Hajtsuk be a * select elemet az 1-es táblázatból, ahol col1=A idx1-et használ Hajtsuk végre a select * gombot az 1-es táblázatból, ahol col1=A és col2=B szintén idx1-et használnak
(2) Töröld az idx1 indexet, majd hozz létre egy idx2-t (col1,col2) összetett indexen Mindkét lekérdezés idx2-t használ
(3) Ha mindkét index, idx1 és idx2 létezik Nem ott van, ahol col1='A' idx1-et használ; ahol col1=A és col2=B idx2-t használ. Lekérdezésoptimalizálója az egyik korábban leggyakrabban használt indexet használja. Vagy használd az idx1-et, vagy idx2-t.
Látható, hogy (1) Egy táblázatnál, ha van összetett index (col1, col2) között, nincs szükség egyetlen indexet létrehozni az 1. col-on egyszerre. (2) Ha a lekérdezési feltételek megkövetelik, hozzáadhatod a vegyet indexet (col1, col2) ponton, amikor már létezik egyetlen index az 1. col1-en, ami bizonyos mértékben javíthatja a hatékonyságot. (3) Nincs különösebben sok előnye annak, ha egyszerre több mezőt (5 vagy 6 mezőt tartalmaz) összetett indexet állítunk fel, viszonylag nézve, több szűk mezővel rendelkező index létrehozása (amely csak egy, legfeljebb 2 mezőt tartalmaz) jobb hatékonyságot és rugalmasságot érhet el.
5. Le kell fednem a kérdést? Általában nem érdemes olyan stratégiát alkalmazni, amely a teljes körű lekérdezési lefedettséget hangsúlyozza. Ha a Select záradék összes oszlopát felülírja egy nem klaszterezett index, az optimalizáló ezt felismeri, és jó teljesítményt nyújt. Ez azonban gyakran túl széles indexhez és túlzott támaszkodáshoz vezet, hogy az optimizátor mennyire használja a politikát. Általában szűk indexeket használnak nagyobb számú lekérdezéshez, ami nagyobb lekérdezéseknél jobb teljesítményt nyújt. |