Šis raksts ir mašīntulkošanas spoguļraksts, lūdzu, noklikšķiniet šeit, lai pārietu uz oriģinālo rakstu.

Skats: 11383|Atbildi: 0

[Paziņojums] SQL Server saliktā indeksa apguve

[Kopēt saiti]
Publicēts 29.01.2015 13:06:03 | | |

Pārskats
Kas ir vienots indekss un kas ir saliktais indekss? Kad izveidot jaunu saliktu indeksu un kam jāpievērš uzmanība saliktajā indeksā? Šis raksts galvenokārt ir dažu diskusiju kopsavilkums internetā.

Viens. Koncepcija

Viens indekss ir situācija, kad indekss ir uzskaitīts vienā kolonnā, tas ir, paziņojums par jauna indeksa izveidi tiek īstenots tikai vienā kolonnā.

Lietotāji var izveidot indeksus vairākās kolonnās, ko sauc par saliktajiem indeksiem (kombinētajiem indeksiem). Saliktie indeksi tiek izveidoti tieši tāpat kā atsevišķi indeksi. Taču saliktajiem indeksiem datu bāzes operāciju laikā ir nepieciešams mazāks pieskaitāmais izdevums, un tie var aizstāt vairākus atsevišķus indeksus. Ja rindu skaits tabulā ir daudz lielāks par atslēgu skaitu, šī metode var ievērojami paātrināt tabulas vaicājuma ātrumu.

Vienlaikus ir divi jēdzieni, šauri indeksi un plati indeksi, šauri indeksi attiecas uz indeksiem ar 1-2 kolonnām un parasti attiecas uz vienu indeksu, ja vien nav norādīts citādi. Plašs indekss ir indekss ar vairāk nekā 2 kolonnām.

Svarīgs indeksa izstrādes princips ir izmantot šaurus indeksus, nevis platus indeksus, jo šauri indeksi mēdz būt efektīvāki nekā kombinētie indeksi. Šaurāki indeksi dos optimizētājam lielāku izvēli, kas bieži palīdz uzlabot veiktspēju.

Divi. Lietošana

Indeksa izveide
Indeksa IDX1 izveide tabulā1(COL1,COL2,COL3)  
Noskaidrot
izvēlieties * no tabulas1, kur col1= A un col2= B un col3 = C

Šobrīd vaicājumu optimizētājs neskenē tabulu, bet tieši ņem datus no indeksa, jo šie dati ir indeksā, ko sauc par pārklājuma vaicājumu, un vaicājuma ātrums ir ļoti ātrs.   

Trīs. Piezīmes:

1. Kad izmantot salikto indeksu
Nosacījumā where lauks tiek indeksēts, un, ja tiek izmantoti vairāki lauki, tiek izmantots saliktais indekss. Parasti atlases laukā neveidojiet nekādus indeksus (ja vēlaties vaicāt atlasīt col1, col2, col3 no mytable, jums nav nepieciešams iepriekš minētais indekss). Indeksēšana, pamatojoties uz apstākļiem, ir ārkārtīgi svarīgs princips. Esiet uzmanīgi, lai neizmantotu pārāk daudz indeksu, pretējā gadījumā tam būs liela ietekme uz tabulu atjauninājumu efektivitāti, jo, darbojoties tabulās, jums ir jāpavada daudz laika, veidojot indeksus.

2. Saliktajiem indeksiem, izmantojot vaicājumu, vislabāk ir ievērot indeksu atrašanas secību, kas ir visefektīvākā. Piemēram:  
  IDX1:izveidot indeksu IDX1 tabulā1(col2,col3,col5)  
  atlasiet * no tabulas1, kur col2=A un col3=B un col5=D  

Ja tas ir "izvēlieties * no tabulas1, kur col3=B un col2=A un col5=D"
Vai arī "atlasiet * no tabulas1, kur col3=B" neizmantos indeksu, vai arī efekts nav pamanāms

3. Vai saliktais indekss aizstās vienu indeksu?
Daudzi cilvēki domā, ka jebkura lauka pievienošana klasterētajam indeksam var uzlabot vaicājuma ātrumu, taču daži cilvēki ir neizpratnē: ja saliktie sagrupētie indeksa lauki tiek vaicāti atsevišķi, vai vaicājuma ātrums tiks palēnināts? Ar šo jautājumu apskatīsim šādu vaicājuma ātrumu (rezultātu kopa ir 250 000 datu vienību) :( datuma kolonna fariqi ieņem pirmo vietu saliktā apkopojuma indeksa sākuma kolonnā, bet lietotājvārds neibuyonghu ieņem otro vietu)

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

(1) izvēlieties gid, fariqi, neibuyonghu, nosaukumu no Tgongwen
kur fariqi>'2004-5-5'

Vaicājuma ātrums: 2513 ms

(2) izvēlieties gid, fariqi, neibuyonghu, nosaukumu no Tgongwen
kur fariqi>'2004-5-5' un neibuyonghu='birojs'

Vaicājuma ātrums: 2516 ms

(3) izvēlieties gid, fariqi, neibuyonghu, nosaukumu no Tgongwen
kur neibuyonghu='birojs'

Vaicājuma ātrums: 60280 milisekundes

No iepriekš minētajiem eksperimentiem mēs varam redzēt, ka, ja kā vaicājuma nosacījums tiek izmantota tikai klasterētā indeksa sākuma kolonna, visu kolonnu ar salikto sagrupēto indeksu vaicājuma ātrums ir gandrīz vienāds, pat nedaudz ātrāks nekā visu salikto indeksu kolonnu izmantošana (ja vaicājuma rezultātu kopu skaits ir vienāds). Ja kā vaicājuma nosacījumi tiek izmantotas tikai saliktā apkopotā indeksa kolonnas, kas nav sākuma kolonnas, šis indekss neko nedarīs. Protams, 1. un 2. paziņojuma vaicājuma ātrums ir vienāds, jo vaicājuma ierakstu skaits ir vienāds, ja tiek izmantotas visas saliktā indeksa kolonnas un vaicājuma rezultāti ir maz, tas veidos "indeksa ignorēšanu", lai varētu optimizēt veiktspēju. Ņemiet vērā arī to, ka neatkarīgi no tā, vai bieži izmantojat citas apkopotā indeksa kolonnas, vadošajai kolonnai ir jābūt visbiežāk lietotajai.

[Atsauce: vaicājumu optimizācijas un lapu veidošanas algoritma shēma http://blog.csdn.net/chiefsailor/archive/2007/05/28/1628339.aspx]

4. Vai vienā kolonnā vienlaikus ir jāizveido viens indekss un salikts indekss?
Eksperiments: Sysbase 5.0 tabulas tabula1 lauki: col1, col2, col3  

Testa soļi:  
(1) Izveidojiet indeksu idx1 uz col1  
  Izpildīt atlasi * no tabulas1, kur col1=A izmanto idx1  
  Izpildīt atlasi * no tabulas1, kur col1=A un col2=B izmanto arī idx1  

(2) Izdzēsiet indeksu idx1 un pēc tam izveidojiet idx2 (col1,col2) saliktajā indeksā  
  Abos vaicājumos tiek izmantots idx2  

(3) Ja pastāv abi indeksi idx1 un idx2  
  Tas nav tur, kur col1='A' izmanto idx1; kur col1=A un col2=B izmanto idx2.  
  Tās vaicājumu optimizētājs izmanto vienu no iepriekš izmantotajiem indeksiem. Izmantojiet idx1 vai idx2.  
   
Var redzēt, ka
(1) Tabulai, ja ir salikts indekss (col1, col2), nav nepieciešams vienlaikus izveidot vienu indeksu uz col1.
(2) Ja vaicājuma nosacījumi to prasa, varat pievienot salikto indeksu (col1, col2), kad col1 jau ir viens indekss, kas zināmā mērā var uzlabot efektivitāti.
(3) Nav īpaši daudz priekšrocību, izveidojot saliktu indeksu ar vairākiem laukiem (kas satur 5 vai 6 laukus) vienlaicīgi, salīdzinoši runājot, indeksa izveide ar vairākiem šauriem laukiem (kas satur tikai vienu vai ne vairāk kā 2 laukus) var panākt labāku efektivitāti un elastību.



5. Vai man ir jāaptver vaicājums?
Parasti vislabāk nav izmantot stratēģiju, kas uzsver pilnīgu vaicājumu pārklājumu. Ja visas kolonnas klauzulā Select ir pārrakstītas ar negrupētu indeksu, optimizētājs to atpazīs un nodrošinās labu veiktspēju. Tomēr tas bieži izraisa pārāk plašu indeksu un pārmērīgu paļaušanos uz varbūtību, ka optimizētājs izmanto politiku. Parasti šauri indeksi tiek izmantoti lielākam vaicājumu skaitam, kas nodrošina labāku veiktspēju lieliem vaicājumiem.




Iepriekšējo:C# winform novērš sql injekciju
Nākamo:Dell servera kļūdu kodi un risinājumi 2013 izdevums
Atruna:
Visa programmatūra, programmēšanas materiāli vai raksti, ko publicē Code Farmer Network, ir paredzēti tikai mācību un pētniecības mērķiem; Iepriekš minēto saturu nedrīkst izmantot komerciāliem vai nelikumīgiem mērķiem, pretējā gadījumā lietotājiem ir jāuzņemas visas sekas. Informācija šajā vietnē nāk no interneta, un autortiesību strīdiem nav nekāda sakara ar šo vietni. Iepriekš minētais saturs ir pilnībā jāizdzēš no datora 24 stundu laikā pēc lejupielādes. Ja jums patīk programma, lūdzu, atbalstiet oriģinālu programmatūru, iegādājieties reģistrāciju un iegūstiet labākus oriģinālus pakalpojumus. Ja ir kādi pārkāpumi, lūdzu, sazinieties ar mums pa e-pastu.

Mail To:help@itsvse.com