Denne artikkelen er en speilartikkel om maskinoversettelse, vennligst klikk her for å hoppe til originalartikkelen.

Utsikt: 11383|Svare: 0

[Kommunikasjon] SQL Server Composite Index Learning

[Kopier lenke]
Publisert på 29.01.2015 13:06:03 | | |

Oversikt
Hva er en enkelt indeks, og hva er en sammensatt indeks? Når bør jeg opprette en ny sammensatt indeks, og hva bør jeg være oppmerksom på i den sammensatte indeksen? Denne artikkelen er hovedsakelig et sammendrag av noen diskusjoner på Internett.

Én. Konsept

En enkelt indeks er en situasjon der indeksen er listet i én kolonne, det vil si at uttalelsen om å opprette en ny indeks implementeres i bare én kolonne.

Brukere kan lage indekser på flere kolonner, som kalles sammensatte indekser (kombinerte indekser). Sammensatte indekser lages på nøyaktig samme måte som enkeltindekser. Men sammensatte indekser krever mindre overhead under databaseoperasjoner og kan erstatte flere enkeltindekser. Når antallet rader i en tabell er mye større enn antall nøkler, kan denne metoden betydelig øke spørringshastigheten til tabellen.

Det finnes to begreper samtidig: smale indekser og brede indekser, smale indekser refererer til indekser med 1–2 kolonner, og refererer vanligvis til én indeks med mindre annet er spesifisert. En bred indeks er en indeks med mer enn 2 kolonner.

Et viktig prinsipp for indeksdesign er å bruke smale indekser i stedet for brede indekser, fordi smale indekser ofte er mer effektive enn kombinerte indekser. Å ha smalere indekser gir optimalisatoren flere valgmuligheter, noe som ofte bidrar til å forbedre ytelsen.

To. Bruk

Lag en indeks
Opprett indeks IDX1 på tabell1(col1,col2,col3)  
Spørre
velg * fra tabell1 hvor kol1= A og kol2= B og kol3 = C

På dette tidspunktet skanner ikke spørringsoptimalisatoren tabellen, men tar direkte data fra indeksen, fordi det finnes disse dataene i indeksen, som kalles en overlay-spørring, og spørringshastigheten er svært rask.   

Tre. Notater:

1. Når man skal bruke en sammensatt indeks
I where-betingelsen er feltet indeksert, og hvis flere felt brukes, brukes en sammensatt indeks. Generelt, ikke bygg noen indekser i select-feltet (hvis du vil spørre, velg col1, col2, col3 fra mytable, du trenger ikke indeksen ovenfor). Indeksering basert på hvor betingelsene er et ekstremt viktig prinsipp. Vær forsiktig med å ikke bruke for mange indekser, ellers vil det ha stor innvirkning på effektiviteten ved tabelloppdateringer, fordi du må bruke mye tid på å lage indekser når du opererer tabeller.

2. For sammensatte indekser, når man bruker spørring, er det best å følge rekkefølgen for å finne indekser, som er mest effektiv. For eksempel:  
  IDX1: opprett indeks idx1 på tabell1(kol2,kol3,kol5)  
  velg * fra tabell1 hvor kol2=A og kol3=B og kol5=D  

Hvis det er "velg * fra tabell1 hvor kol3=B og kol2=A og kol5=D"
Eller «velg * fra tabell1 der kol3=B» vil ikke bruke indeksen, eller effekten er ikke merkbar

3. Vil en sammensatt indeks erstatte en enkelt indeks?
Mange tror at det å legge til et hvilket som helst felt i den klyngede indeksen kan forbedre spørringshastigheten, men noen er forvirret: Hvis de sammensatte klyngede indeksfeltene spørres separat, vil spørringshastigheten da bli tregere? Med dette spørsmålet, la oss se på følgende spørringshastighet (resultatsettet er 250 000 databiter) :( datokolonne fariqi rangerer først i startkolonnen i den sammensatte aggregationsindeksen, og brukernavnet neibuyonghu rangeres som nummer to)

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

(1) velg Gid, Fariqi, Neibuyonghu, tittel fra Tgongwen
hvor fariqi>'2004-5-5'

Spørringshastighet: 2513 ms

(2) velg gid, fariqi, neibuyonghu, tittel fra Tgongwen
hvor fariqi>'2004-5-5' og neibuyonghu='kontor'

Spørringshastighet: 2516 ms

(3) velg gid, fariqi, neibuyonghu, tittel fra Tgongwen
hvor neibuyonghu = 'kontor'

Spørringshastighet: 60280 millisekunder

Fra eksperimentene ovenfor kan vi se at hvis bare startkolonnen i den klyngede indeksen brukes som spørringsbetingelse, er spørringshastigheten for alle kolonner med den sammensatte klyngede indeksen nesten den samme, til og med litt raskere enn å bruke alle de sammensatte indekskolonnene (når antall spørringsresultater er det samme). Hvis kun de ikke-startkolonnene i den sammensatte aggregerte indeksen brukes som spørringsbetingelser, vil ikke denne indeksen gjøre noe. Selvfølgelig er spørringshastigheten for setningene 1 og 2 den samme fordi antall oppføringer i spørringen er det samme; hvis alle kolonnene i den sammensatte indeksen brukes, og spørringsresultatene er få, vil dette danne en "indeksoverstyring", slik at ytelsen kan optimaliseres. Husk også at uansett om du bruker andre kolonner i aggregatindeksen ofte eller ikke, må ledende kolonne være den som brukes oftest.

[Ref: Spørringsoptimalisering og pagineringsalgoritmeskjema http://blog.csdn.net/chiefsailor/archive/2007/05/28/1628339.aspx]

4. Må jeg lage én indeks og en sammensatt indeks i samme kolonne samtidig?
Eksperiment: Sysbase 5.0 tabell tabell1 felt: kol1, kol2, kol3  

Testtrinn:  
(1) Opprett indeksen idx1 på kol1  
  Kjør select * fra table1 hvor col1=A bruker idx1  
  Kjør select * fra table1 hvor col1=A og col2=B også bruker idx1  

(2) Slett indeksen idx1, og lag deretter en idx2 på (kol1,kol2) sammensatt indeks  
  Begge spørringene bruker idx2  

(3) Hvis begge indeksene idx1 og idx2 eksisterer  
  Det er ikke der kol1='A' bruker idx1; der kol1=A og kol2=B bruker idx2.  
  Dens spørringsoptimalisator bruker en av de tidligere vanlige indeksene. Bruk enten idx1 eller idx2.  
   
Det kan sees at
(1) For en tabell, hvis det finnes en sammensatt indeks på (kol1, kol2), er det ikke nødvendig å lage en enkelt indeks på kol1 samtidig.
(2) Hvis spørringsbetingelsene krever det, kan du legge til den sammensatte indeksen på (kol1, kol2) når det allerede finnes én indeks på kol1, noe som kan forbedre effektiviteten til en viss grad.
(3) Det er ikke særlig mange fordeler ved å etablere en sammensatt indeks med flere felter (som inneholder 5 eller 6 felt) samtidig, relativt sett kan etablering av en indeks med flere smale felt (som inneholder bare ett, eller maksimalt 2 felt) oppnå bedre effektivitet og fleksibilitet.



5. Må jeg dekke forespørselen?
Det er som regel best å ikke bruke en strategi som legger vekt på full søkedekning. Hvis alle kolonner i Select-klausulen overskrives av en ikke-klynget indeks, vil optimalisatoren gjenkjenne dette og gi god ytelse. Dette resulterer imidlertid ofte i en altfor bred indeks og overdreven avhengighet av sannsynligheten for at optimalisatoren bruker policyen. Vanligvis brukes smale indekser for et større antall spørringer, noe som gir bedre ytelse for store spørringer.




Foregående:C# winform forhindrer SQL-injeksjon
Neste:Dell Server feilkoder og løsninger 2013-utgaven
Ansvarsfraskrivelse:
All programvare, programmeringsmateriell eller artikler publisert av Code Farmer Network er kun for lærings- og forskningsformål; Innholdet ovenfor skal ikke brukes til kommersielle eller ulovlige formål, ellers skal brukerne bære alle konsekvenser. Informasjonen på dette nettstedet kommer fra Internett, og opphavsrettstvister har ingenting med dette nettstedet å gjøre. Du må fullstendig slette innholdet ovenfor fra datamaskinen din innen 24 timer etter nedlasting. Hvis du liker programmet, vennligst støtt ekte programvare, kjøp registrering, og få bedre ekte tjenester. Hvis det foreligger noen krenkelse, vennligst kontakt oss på e-post.

Mail To:help@itsvse.com