Tämä artikkeli on konekäännöksen peiliartikkeli, klikkaa tästä siirtyäksesi alkuperäiseen artikkeliin.

Näkymä: 11383|Vastaus: 0

[Viestintä] SQL Server Composite Index -oppiminen

[Kopioi linkki]
Julkaistu 29.1.2015 13.06.03 | | |

Yleiskatsaus
Mikä on yksittäinen indeksi ja mikä on yhdistelmäindeksi? Milloin luoda uusi yhdistelmäindeksi, ja mihin minun tulisi kiinnittää huomiota komposiittiindeksissä? Tämä artikkeli on pääasiassa yhteenveto joistakin Internetissä käytyistä keskusteluista.

Yksi. Käsite

Yksittäinen indeksi tarkoittaa tilannetta, jossa indeksi on listattu yhteen sarakkeeseen, eli uuden indeksin luomisen lauseke toteutetaan vain yhdessä sarakkeessa.

Käyttäjät voivat luoda indeksejä useille sarakkeille, joita kutsutaan yhdistetyiksi indekseiksi (yhdistetyiksi indekseiksi). Yhdistelmäindeksit luodaan täsmälleen samalla tavalla kuin yksittäiset indeksit. Mutta yhdistelmäindeksit vaativat vähemmän kuormitusta tietokantatoimintojen aikana ja voivat korvata useita yksittäisiä indeksejä. Kun taulukon rivien määrä on paljon suurempi kuin avainten määrä, tämä menetelmä voi merkittävästi nopeuttaa taulukon kyselynopeutta.

Samanaikaisesti on kaksi käsitettä: kapeat indeksit ja laajat indeksit, kapeat indeksit viittaavat indeksiin, joissa on 1–2 sarakkea, ja yleensä viittaavat yhteen indeksiin, ellei toisin mainita. Laaja indeksi on indeksi, jossa on yli kaksi saraketta.

Tärkeä periaate indeksisuunnittelussa on käyttää kapeita indeksejä laajojen indeksien sijaan, koska kapeat indeksit ovat yleensä tehokkaampia kuin yhdistetyt indeksit. Kapeammat indeksit antavat optimoijalle enemmän valinnanvaraa, mikä usein parantaa suorituskykyä.

Kaksi. Käyttö

Luo indeksi
Luo indeksi IDX1 taulukkoon1 (col1, col2, col3)  
Tiedustella
valitse * taulukosta 1, missä col1= A ja col2= B ja col3 = C

Tällä hetkellä kyselyoptimaattori ei skannaa taulukkoa, vaan ottaa datan suoraan indeksistä, koska indeksissä on dataa, jota kutsutaan päällekkäiseksi kyselyksi, ja kyselynopeus on erittäin nopea.   

Kolme. Huomautuksia:

1. Milloin käyttää yhdysindeksiä
Where-ehdossa kenttä indeksoidaan, ja jos käytetään useita kenttiä, käytetään yhdistelmäindeksiä. Yleisesti ottaen älä rakenna indeksejä valintakenttään (jos haluat kysyä valitse col1, col2, col3 mytablesta, et tarvitse yllä olevaa indeksiä). Indeksointi ehtojen perusteella on äärimmäisen tärkeä periaate. Ole varovainen, ettet käytä liikaa indeksejä, muuten sillä on suuri vaikutus taulukkopäivitysten tehokkuuteen, koska taulukoita käytettäessä täytyy käyttää paljon aikaa indeksien luomiseen.

2. Yhdistettyjen indeksien kohdalla, kun käytetään kyselyä, on parasta noudattaa indeksien löytämisen järjestystä, joka on tehokkain. Esimerkiksi:  
  IDX1:luo indeksi idx1 taulukkoon1(col2,col3,col5)  
  valitse * taulukosta 1, jossa col2=A ja col3=B ja col5=D  

Jos se on "valitse * taulukosta 1, missä col3=B ja col2=A ja col5=D"
Tai "valitse * taulukosta 1, missä col3=B" ei käytä indeksiä, tai vaikutus ei ole havaittavissa

3. Korvaako yhdistelmäindeksi yhden indeksin?
Monet ajattelevat, että minkä tahansa kentän lisääminen klusteroituun indeksiin voi parantaa kyselyjen nopeutta, mutta jotkut ovat hämmentyneitä: Jos yhdistetyt klusteroidut indeksikentät haetaan erikseen, hidastuuko kyselynopeus? Tämän kysymyksen myötä tarkastellaan seuraavaa kyselynopeutta (tulosjoukko on 250 000 tietoa) :( päivämääräsarake fariqi sijoittuu ensimmäiseksi yhdistetyn aggregaatioindeksin aloitussarakkeessa ja käyttäjätunnus neibuyonghu on toisena)

IDX1:create   index   idx1   on   Tgongwen(fariqi,neibuyonghu)  

(1) Valitse Gid, Fariqi, Neibuyonghu, arvonimi Tgongwenista
missä Fariqi>'2004-5-5'

Kyselynopeus: 2513 ms

(2) Valitse Gid, Fariqi, Neibuyonghu, arvonimi Tgongwenista
missä Fariqi>'2004-5-5' ja neibuyonghu='toimisto'

Kyselynopeus: 2516 ms

(3) Valitse Gid, Fariqi, Neibuyonghu, arvonimi Tgongwenista
missä neibuyonghu='toimisto'

Kyselynopeus: 60280 millisekuntia

Yllä olevista kokeista voimme nähdä, että jos kyselyehtona käytetään vain klusteroidun indeksin aloitussaraketta, kaikkien yhdistelmäklusteroidun indeksin sarakkeiden kyselynopeus on lähes sama, jopa hieman nopeampi kuin kaikkien yhdistelmäindeksisarakkeiden käyttö (kun kyselyjen tulosjoukkojen määrä on sama). Jos kyselyehtoina käytetään vain yhdistetyn aggregoidun indeksin ei-alkoivat sarakit, tämä indeksi ei tee mitään. Tietenkin lauseiden 1 ja 2 kyselynopeus on sama, koska kyselyn merkintöjen määrä on sama; jos kaikki yhdistelmäindeksin sarakkeet ovat käytössä ja kyselytuloksia on vähän, tämä muodostaa "indeksin ohitus", jolloin suorituskyky voidaan optimoida. Muista myös, että riippumatta siitä, käytätkö muita sarakkeita aggregaattiindeksissä usein, johtavaa saraketta käytetään useimmin.

[Viite: Kyselyn optimointi ja sivutusalgoritmi http://blog.csdn.net/chiefsailor/archive/2007/05/28/1628339.aspx]

4. Täytyykö minun luoda sama indeksi ja yhdistelmäindeksi samalle sarakkeelle samanaikaisesti?
Koe: Sysbase 5.0 taulukko 1 kentät: col1, col2, col3  

Testivaiheet:  
(1) Luo indeksi idx1 col1:lle  
  Suorita valinta * taulukosta 1, missä col1=A käyttää idx1  
  Suorita valinta * taulukosta 1, missä col1=A ja col2=B käyttävät myös idx1  

(2) Poista indeksi idx1 ja luo sitten idx2 (col1,col2) yhdistelmäindeksiin  
  Molemmat kyselyt käyttävät idx2:ta  

(3) Jos molemmat indeksit idx1 ja idx2 ovat olemassa  
  Se ei ole siellä, missä col1='A' käyttää idx1; missä col1=A ja col2=B käyttää idx2.  
  Sen kyselyoptimointiohjelma käyttää yhtä aiemmin yleisesti käytetyistä indekseistä. Käytä joko idx1:tä tai idx2:ta.  
   
On nähtävissä, että
(1) Taulukossa, jos (col1, col2) on yhdistetty indeksi, ei ole tarpeen luoda yhtä indeksiä col1:lle samanaikaisesti.
(2) Jos kyselyehdot sitä vaativat, voit lisätä yhdysindeksin (col1, col2) kohdalle, kun col1:llä on jo yksi indeksi, mikä voi parantaa tehokkuutta jonkin verran.
(3) Yhdistelmäindeksin perustamisessa, jossa on useita kenttiä (sisältäen 5 tai 6 kenttää) samanaikaisesti, ei ole erityisen paljon hyötyä; suhteellisen ottaen indeksin luominen useilla kapeilla kentillä (joissa on vain yksi tai korkeintaan 2 kenttää) voi saavuttaa paremman tehokkuuden ja joustavuuden.



5. Täytyykö minun vastata kyselyyn?
On yleensä parasta olla käyttämättä strategiaa, joka korostaa täyttä kyselykattoa. Jos kaikki Select-lausekkeen sarakkeet ylikirjoitetaan ei-klusteroidulla indeksillä, optimointi tunnistaa tämän ja tarjoaa hyvän suorituskyvyn. Tämä johtaa kuitenkin usein liian laajaan indeksiin ja liialliseen riippuvuuteen siitä, kuinka todennäköistä optimointia optimointia käytetään. Tyypillisesti kapeita indeksejä käytetään suuremmalle määrälle kyselyitä, mikä parantaa suorituskykyä suurille kyselyille.




Edellinen:C# winform estää SQL-injektion
Seuraava:Dell Server Error Codes and Solutions 2013 Edition
Vastuuvapauslauseke:
Kaikki Code Farmer Networkin julkaisemat ohjelmistot, ohjelmamateriaalit tai artikkelit ovat tarkoitettu vain oppimis- ja tutkimustarkoituksiin; Yllä mainittua sisältöä ei saa käyttää kaupallisiin tai laittomiin tarkoituksiin, muuten käyttäjät joutuvat kantamaan kaikki seuraukset. Tämän sivuston tiedot ovat peräisin internetistä, eikä tekijänoikeuskiistat liity tähän sivustoon. Sinun tulee poistaa yllä oleva sisältö kokonaan tietokoneeltasi 24 tunnin kuluessa lataamisesta. Jos pidät ohjelmasta, tue aitoa ohjelmistoa, osta rekisteröityminen ja hanki parempia aitoja palveluita. Jos rikkomuksia ilmenee, ota meihin yhteyttä sähköpostitse.

Mail To:help@itsvse.com