Pregled Kaj je en indeks in kaj je sestavljen indeks? Kdaj ustvariti nov sestavljen indeks in na kaj naj v sestavljenem indeksu posvetim pozornost? Ta članek je predvsem povzetek nekaterih razprav na internetu.
Ena. Koncept
En sam indeks je situacija, kjer je indeks naveden v enem stolpcu, torej je izjava o ustvarjanju novega indeksa implementirana le v enem stolpcu.
Uporabniki lahko ustvarijo indekse na več stolpcih, ki jih imenujemo sestavljeni indeksi (združeni indeksi). Sestavljeni indeksi so ustvarjeni na povsem enak način kot posamezni indeksi. Vendar pa sestavljeni indeksi zahtevajo manj stroškov med delovanjem baze podatkov in lahko nadomestijo več posameznih indeksov. Ko je število vrstic v tabeli veliko večje od števila ključev, lahko ta metoda bistveno pospeši hitrost poizvedb v tabeli.
Obstajata dva pojma hkrati, ozki indeksi in široki indeksi, ozki indeksi pa se nanašajo na indekse z 1-2 stolpci in običajno na en sam indeks, razen če ni drugače navedeno. Širok indeks je indeks z več kot 2 stolpci.
Pomembno načelo oblikovanja indeksov je uporaba ozkih indeksov namesto širokih, saj so ozki indeksi običajno učinkovitejši od kombiniranih. Ožji indeksi optimizatorju omogočajo več izbire, kar pogosto pomaga izboljšati zmogljivost.
Dva. Uporaba
Ustvarite indeks Ustvari indeks IDX1 v tabeli1(stolec,stolec,2,stolec 3) Poizvedeti izberite * iz tabele1, kjer je stolpec 1 = A in stolpec 2= B in stolpec 3 = C
V tem trenutku optimizator poizvedb ne pregleduje tabele, ampak neposredno zajema podatke iz indeksa, ker so ti podatki v indeksu, imenovani overlay query, in hitrost poizvedbe je zelo hitra.
Tri. Opombe:
1. Kdaj uporabiti sestavljeni indeks V pogojih kjer je polje indeksirano, in če se uporablja več polj, se uporabi sestavljen indeks. Na splošno ne ustvarjajte indeksov v polju select (če želite poizvedovati select1, colca2, stolpec 3 iz mytable, zgornjega indeksa ne potrebujete). Indeksiranje glede na stanje kje je izjemno pomembno načelo. Bodite previdni, da ne uporabljate preveč indeksov, sicer bo to močno vplivalo na učinkovitost posodabljanja tabel, saj morate pri upravljanju tabel porabiti veliko časa za ustvarjanje indeksov.
2. Za sestavljene indekse je pri uporabi poizvedbe najbolje slediti vrstnemu redu iskanja indeksov, ki je najbolj učinkovit. Na primer: IDX1:create index idx1 na tabeli1(col2,col3,col5) izberite * iz tabele1, kjer je col2=A in col3=B ter col5=D
Če je "izberi * iz tabele1, kjer je col3=B in col2=A in col5=D" Ali "izberi * iz tabele1, kjer je stolpec 3=B" ne bo uporabil indeksa ali pa učinek ni opazen
3. Ali bo sestavljen indeks nadomestil en sam indeks? Veliko ljudi meni, da lahko dodajanje kateregakoli polja v gručen indeks izboljša hitrost poizvedb, vendar so nekateri zmedeni: če se sestavljena gručena indeksna polja poizvedujejo ločeno, ali se bo hitrost poizvedb upočasnila? Pri tem vprašanju si poglejmo naslednjo hitrost poizvedb (rezultat obsega 250.000 podatkov) :( stolpec datuma fariqi zaseda prvo mesto v začetnem stolpcu indeksa sestavljene agregacije, uporabniško ime neibuyonghu pa je na drugem mestu)
IDX1:create index idx1 on Tgongwen(fariqi,neibuyonghu)
(1) izberi gid, fariqi, neibuyonghu, naslov od Tgongwena Kjer Fariqi>'2004-5-5'
Hitrost poizvedbe: 2513 ms
(2) izberi gid, fariqi, neibuyonghu, naslov od Tgongwena kjer fariqi>'2004-5-5' in neibuyonghu='pisarna'
Hitrost poizvedbe: 2516 ms
(3) izberi gid, fariqi, neibuyonghu, naslov od Tgongwena kjer neibuyonghu='pisarna'
Hitrost poizvedbe: 60280 milisekund
Iz zgornjih eksperimentov lahko vidimo, da če kot pogoj poizvedbe uporabimo le začetni stolpec gručenega indeksa, je hitrost poizvedbe vseh stolpcev s sestavljanim gručenim indeksom skoraj enaka, celo nekoliko hitrejša kot pri uporabi vseh sestavljenih indeksnih stolpcev (ko je število rezultatov poizvedb enako). Če se kot pogoji za poizvedbo uporabljajo le nezačetni stolpci sestavljenega agregiranega indeksa, ta indeks ne bo naredil ničesar. Seveda je hitrost poizvedbe pri stavkih 1 in 2 enaka, ker je število vnosov v poizvedbi enako; če so uporabljeni vsi stolpci sestavljenega indeksa in je rezultatov poizvedb malo, to tvori "indeksno preglasitev", da se optimizira zmogljivost. Prav tako imejte v mislih, da ne glede na to, ali pogosto uporabljate druge stolpce v agregatnem indeksu, mora biti vodilni stolpec tisti, ki se uporablja najpogosteje.
[Vir: shema algoritma za optimizacijo poizvedb in paginacijo http://blog.csdn.net/chiefsailor/archive/2007/05/28/1628339.aspx]
4. Ali moram hkrati ustvariti en indeks in sestavljen indeks v istem stolpcu? Eksperiment: Sysbase 5.0 tabela 1 polja: stolpec 1, stolpec 2, stolpec 3
Testni koraki: (1) Ustvari indeks idx1 v stolpcu 1 Izvedite select * iz tabele1, kjer stolpec 1=A uporablja idx1 Izvedite select * iz tabele1, kjer col1=A in col2=B prav tako uporabljata idx1
(2) Izbrišite indeks idx1 in nato ustvarite idx2 na (col1,col2) sestavljenem indeksu Obe poizvedbi uporabljata idx2
(3) Če obstajata oba indeksa idx1 in idx2 Ni tam, kjer col1='A' uporablja idx1; kjer col1=A in col2=B uporablja idx2. Njegov optimizator poizvedb uporablja enega od prej pogosto uporabljenih indeksov. Uporabi bodisi idx1 ali idx2.
Vidimo lahko, da (1) Za tabelo, če obstaja sestavljeni indeks na (stolpec 1, stolpec 2), ni potrebe po ustvarjanju enega samega indeksa na stolpcu 1 hkrati. (2) Če pogoji poizvedbe to zahtevajo, lahko sestavljeni indeks dodate na (stolpec 1, stolpec 2), ko je na stolcu 1 že en indeks, kar lahko do določene mere izboljša učinkovitost. (3) Ni posebej veliko prednosti pri vzpostavitvi sestavljenega indeksa z več polji (ki vsebuje 5 ali 6 polj) hkrati, relativno gledano lahko vzpostavitev indeksa z več ozkimi polji (ki vsebuje le eno ali največ 2 polja) doseže boljšo učinkovitost in prilagodljivost.
5. Ali moram pokriti poizvedbo? Na splošno je najbolje, da ne uporabljate strategije, ki poudarja popolno pokritost poizvedb. Če so vsi stolpci v klavzuli Select prepisani z negručenim indeksom, bo optimizator to prepoznal in zagotovil dobro zmogljivost. Vendar to pogosto vodi v preširok indeks in preveliko zanašanje na verjetnost, da bo optimizator uporabil politiko. Običajno se ozki indeksi uporabljajo za večje število poizvedb, kar omogoča boljšo zmogljivost pri velikih poizvedbah. |