See artikkel on masintõlke peegelartikkel, palun klõpsake siia, et hüpata algse artikli juurde.

Vaade: 11383|Vastuse: 0

[Kommunikatsioon] SQL Server Composite Index õppimine

[Kopeeri link]
Postitatud 29.01.2015 13:06:03 | | |

Ülevaade
Mis on üksik indeks ja mis on komposiitindeks? Millal luua uus komposiitindeks ja millele peaksin komposiitindeksis tähelepanu pöörama? See artikkel on peamiselt kokkuvõte mõningatest aruteludest internetis.

Üks. Kontseptsioon

Üksik indeks on olukord, kus indeks on loetletud ühes veerus, st uue indeksi loomise lause rakendatakse ainult ühes veerus.

Kasutajad saavad luua indekseid mitmel veerul, mida nimetatakse komposiitindeksiteks (kombineeritud indeksiteks). Komposiitindeksid luuakse täpselt samamoodi nagu üksikindeksid. Kuid komposiitindeksid nõuavad andmebaasi töötlemisel vähem koormust ja võivad asendada mitut üksikut indeksit. Kui tabeli ridade arv on palju suurem kui võtmete arv, võib see meetod oluliselt kiirendada tabeli päringute kiirust.

Samaaegselt on kaks mõistet: kitsad indeksid ja laiad indeksid; kitsad indeksid viitavad indeksitele, millel on 1–2 veeru, ning üldiselt viitavad ühele indeksile, kui pole teisiti märgitud. Lai indeks on indeks, millel on rohkem kui 2 veergu.

Oluline põhimõte indeksite kujundamisel on kitsaste indeksite kasutamine laiade indeksite asemel, sest kitsad indeksid kipuvad olema tõhusamad kui kombineeritud indeksid. Kitsamad indeksid annavad optimeerijale rohkem valikuvõimalusi, mis sageli aitab jõudlust parandada.

Kaks. Kasutus

Loo indeks
Loo indeks IDX1 Table1-s (col1,col2,col3)  
Küsida
vali * tabelist 1, kus col1= A ja col2= B ning col3 = C

Sel ajal ei skaneeri päringu optimeerija tabelit, vaid võtab andmed otse indeksist, sest indeksis on see andmestik, mida nimetatakse ülekattekpäringuks, ning päringu kiirus on väga kiire.   

Kolm. Märkused:

1. Millal kasutada liitindeksit
Kus tingimuses indekseeritakse väli ja kui kasutatakse mitut välja, kasutatakse kombineeritud indeksit. Üldiselt ära loo valikuväljale ühtegi indeksit (kui soovid mytable'ist valida col1, col2, col3, ei ole ülaltoodud indeksit vaja). Tingimuste järgi indekseerimine on äärmiselt oluline põhimõte. Ole ettevaatlik, et mitte liiga palju indekseid kasutada, muidu mõjutab see oluliselt tabeliuuenduste efektiivsust, sest tabelite kasutamisel tuleb indeksite loomisele kulutada palju aega.

2. Komposiitindeksite puhul, kui kasutatakse päringut, on kõige parem järgida indeksite leidmise järjekorda, mis on kõige tõhusam. Näiteks:  
  IDX1:loo indeks idx1 lauale1 (col2,col3,col5)  
  vali * tabelist 1, kus col2=A ja col3=B ning col5=D  

Kui see on "vali * tabelist 1, kus col3=B ja col2=A ning col5=D"
Või "vali * tabelist 1, kus col3=B" indeksit ei kasuta, või efekt ei ole märgatav

3. Kas komposiitindeks asendab ühe indeksi?
Paljud arvavad, et mis tahes välja lisamine klastriindeksisse võib parandada päringute kiirust, kuid mõned on segaduses: kui liitklasterdatud indeksiväljad päringute korral eraldi, kas päringu kiirus aeglustub? Selle küsimusega vaatame järgmist päringu kiirust (tulemuste hulk on 250 000 andmetükki) :( kuupäevaveerg Fariqi on esikohal komposiitagregatsiooni indeksi algusveerus ja kasutajanimi neibuyonghu teisel kohal)

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

(1) vali tiitel Gid, Fariqi, Neibuyonghu, Tgongwenilt
kus Fariqi>'2004-5-5'

Päringu kiirus: 2513 ms

(2) vali tiitel Gid, Fariqi, Neibuyonghu, Tgongwenilt
kus fariqi>'2004-5-5' ja neibuyonghu='kontor'

Päringu kiirus: 2516 ms

(3) vali tiitel Gid, Fariqi, Neibuyonghu, Tgongwenilt
kus neibuyonghu='kontor'

Päringu kiirus: 60280 millisekundit

Ülaltoodud katsetest näeme, et kui päringu tingimusena kasutatakse ainult klasterdatud indeksi algveergu, on kõigi veergude, millel on komposiitindeks, päringukiirus peaaegu sama, isegi veidi kiirem kui kõigi komposiitindeksi veergude kasutamine (kui päringute tulemuste hulk on sama). Kui päringutingimustena kasutatakse ainult liit-koondindeksi mitte-algavaid veerge, siis see indeks ei tee midagi. Loomulikult on väidete 1 ja 2 päringukiirus sama, sest päringu kirjete arv on sama; kui kasutatakse kõiki liitindeksi veerge ja päringutulemusi on vähe, moodustab see "indeksi ülekirjutuse", et jõudlust saaks optimeerida. Samuti pea meeles, et olenemata sellest, kas kasutad koondindeksis teisi veerge sagedamini või mitte, peab juhtiv veerg olema see, mida kasutatakse kõige sagedamini.

[Viide: Päringute optimeerimine ja lehekülgede algoritmi skeem http://blog.csdn.net/chiefsailor/archive/2007/05/28/1628339.aspx]

4. Kas pean samale veerule looma ühe indeksi ja komposiitindeksi samaaegselt?
Eksperiment: Sysbase 5.0 tabeli 1 väljad: col1, col2, col3  

Testisammud:  
(1) Loo indeks idx1 col1 peal  
  Täida valik * tabelist 1, kus col1=A kasutab idx1  
  Täida valik * tabelist1, kus col1=A ja col2=B kasutavad samuti idx1  

(2) Kustuta indeks idx1 ja seejärel loo idx2 (col1,col2) komposiitindeksile  
  Mõlemad päringud kasutavad idx2  

(3) Kui eksisteerivad mõlemad indeksid idx1 ja idx2  
  See ei ole koht, kus col1='A' kasutab idx1; kus col1=A ja col2=B kasutab idx2.  
  Selle päringute optimeerija kasutab üht varem sagedamini kasutatud indeksit. Kasuta kas idx1 või idx2.  
   
On näha, et
(1) Tabeli puhul, kui on liitindeks (col1, col2), ei ole vaja luua ühte indeksit col1 peal samaaegselt.
(2) Kui päringutingimused seda nõuavad, võid lisada liitindeksi (col1, col2) peale, kui col1-l on juba üks indeks, mis võib efektiivsust teatud määral parandada.
(3) Mitme väljaga (mis sisaldab 5 või 6 välja) samaaegselt koostatud komposiitindeksi loomisel ei ole eriti palju eeliseid; suhteliselt võttes võib indeksi loomine mitme kitsast väljaga (mis sisaldab ainult ühte või maksimaalselt kahte välja) saavutada parema efektiivsuse ja paindlikkuse.



5. Kas ma pean päringu katma?
Üldiselt on kõige parem mitte kasutada strateegiat, mis rõhutab täielikku päringute katvust. Kui kõik Select-klausli veerud kirjutatakse üle mitteklasterdatud indeksiga, tuvastab optimeerija selle ja pakub head jõudlust. Kuid see viib sageli liiga laia indeksi ja liigse sõltuvuseni optimeerija poliitika kasutamise tõenäosusest. Tavaliselt kasutatakse kitsaid indekseid suurema hulga päringute puhul, mis tagab parema jõudluse suurte päringute puhul.




Eelmine:C# winform takistab SQL-i süstimist
Järgmine:Dell Serveri veakoodid ja lahendused 2013. aasta väljaanne
Disclaimer:
Kõik Code Farmer Networki poolt avaldatud tarkvara, programmeerimismaterjalid või artiklid on mõeldud ainult õppimiseks ja uurimistööks; Ülaltoodud sisu ei tohi kasutada ärilistel ega ebaseaduslikel eesmärkidel, vastasel juhul kannavad kasutajad kõik tagajärjed. Selle saidi info pärineb internetist ning autoriõiguste vaidlused ei ole selle saidiga seotud. Ülaltoodud sisu tuleb oma arvutist täielikult kustutada 24 tunni jooksul pärast allalaadimist. Kui sulle programm meeldib, palun toeta originaaltarkvara, osta registreerimist ja saa paremaid ehtsaid teenuseid. Kui esineb rikkumist, palun võtke meiega ühendust e-posti teel.

Mail To:help@itsvse.com