Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 11383|Răspunde: 0

[Comunicare] SQL Server Composite Index Learning

[Copiază linkul]
Postat pe 29.01.2015 13:06:03 | | |

Prezentare generală
Ce este un indice unic și ce este un indice compozit? Când să creez un nou indice compozit și la ce ar trebui să fiu atent în acest indice? Acest articol este în principal un rezumat al unor discuții de pe Internet.

Unu. Concept

Un index unic este o situație în care indexul este listat într-o singură coloană, adică afirmația creării unui nou index este implementată doar pe o singură coloană.

Utilizatorii pot crea indexuri pe mai multe coloane, numite indexuri compozite (indexuri combinate). Indicii compoși sunt creați exact în același mod ca indicii individuali. Însă indicii compoziți necesită mai puțină muncă suplimentară în timpul operațiunilor bazei de date și pot înlocui mai mulți indici individuali. Când numărul de rânduri dintr-un tabel este mult mai mare decât numărul de chei, această metodă poate accelera semnificativ viteza de interogare a tabelului.

Există două concepte în același timp: indici îngusti și indici largi, indicii îngusti se referă la indici cu 1-2 coloane și, în general, se referă la un singur indice, cu excepția cazului în care se specifică altfel. Un index larg este un index cu mai mult de 2 coloane.

Un principiu important al proiectării indicilor este utilizarea indicilor îngusti în loc de indici largi, deoarece indicii îngusti tind să fie mai eficienți decât indicii combinați. A avea indici mai îngusti va oferi optimizatorului mai multă alegere, ceea ce adesea ajută la îmbunătățirea performanței.

Doi. Utilizare

Creează un index
Creează indicele IDX1 pe tabel1(col1,col2,col3)  
Întreba
selectați * din tabelul 1 unde col1 = A și col2 = B și col3 = C

În acest moment, optimizatorul de interogare nu scanează tabelul, ci preia direct datele din index, deoarece există aceste date în index, care se numesc interogare suprapusă, iar viteza interogării este foarte rapidă.   

Trei. Note:

1. Când să se folosească un indice compus
În condiția where, câmpul este indexat, iar dacă se folosesc mai multe câmpuri, se folosește un indice compozit. În general, nu construi niciun index în câmpul select (dacă vrei să interogezi col1, col2, col3 din mytable, nu ai nevoie de indexul de mai sus). Indexarea pe baza condițiilor este un principiu extrem de important. Ai grijă să nu folosești prea mulți indici, altfel va avea un impact mare asupra eficienței actualizărilor tabelelor, pentru că trebuie să petreci mult timp creând indici când operezi tabele.

2. Pentru indicii compoziți, când se folosește interogarea, este mai bine să urmați ordinea de găsire a indicilor, care este cea mai eficientă. De exemplu:  
  IDX1:create index idx1 pe tabel1(col2,col3,col5)  
  select * din tabelul 1 unde col2=A și col3=B și col5=D  

Dacă este "selectează * din tabelul 1 unde col3=B și col2=A și col5=D"
Sau "selectează * din tabelul 1 unde col3=B" nu va folosi indicele, sau efectul nu este vizibil

3. Va înlocui un indice compozit un singur indice?
Mulți oameni cred că adăugarea oricărui câmp la indexul clusterizat poate îmbunătăți viteza interogării, dar unii sunt confuzi: dacă câmpurile de index cluster compus sunt interogate separat, viteza de interogare va fi încetinită? La această întrebare, să aruncăm o privire la următoarea viteză a interogării (setul de rezultate este de 250.000 de date) :( coloana de dată fariqi ocupă primul loc în coloana de început a indexului de agregare compusă, iar numele de utilizator neibuyonghu este pe locul doi)

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

(1) selectează gid, fariqi, neibuyonghu, titlu de la Tgongwen
unde Fariqi>'2004-5-5'

Viteza interogării: 2513 ms

(2) selectează gid, fariqi, neibuyonghu, titlu de la Tgongwen
unde fariqi>'2004-5-5' și neibuyonghu='birou'

Viteză de interogare: 2516 ms

(3) selectează gid, fariqi, neibuyonghu, titlul de la Tgongwen
unde neibuyonghu='birou'

Viteza interogării: 60280 milisecunde

Din experimentele de mai sus, putem vedea că dacă doar coloana de start a indexului clusterizat este folosită ca condiție de interogare, viteza de interogare a tuturor coloanelor cu indexul cluster compozit este aproape aceeași, chiar puțin mai rapidă decât folosind toate coloanele indexului compozit (când numărul de seturi de rezultate este același). Dacă doar coloanele non-inițiale ale indicelui agregat compus sunt folosite ca condiții de interogare, acest indice nu va face nimic. Desigur, viteza interogării instrucțiunilor 1 și 2 este aceeași deoarece numărul de intrări din interogare este același; dacă se folosesc toate coloanele indexului compozit și rezultatele interogării sunt puține, acest lucru va forma o "suprascriere a indexului", astfel încât performanța să poată fi optimizată. De asemenea, ține cont că, indiferent dacă folosești sau nu frecvent alte coloane în indexul agregat, coloana principală trebuie să fie cea folosită cel mai frecvent.

[Referință: Schema de optimizare a interogărilor și algoritmul de paginare http://blog.csdn.net/chiefsailor/archive/2007/05/28/1628339.aspx]

4. Trebuie să creez un singur index și un index compozit pe aceeași coloană în același timp?
Experiment: Sysbase 5.0 tabelul tabel1 câmpuri: col1, col2, col3  

Pași de testare:  
(1) Creează indicele IDX1 pe col1  
  Execută select * din tabelul 1 unde col1=A folosește idx1  
  Execute select * din tabelul 1 unde col1=A și col2=B folosesc de asemenea idx1  

(2) Șterge indicele idx1 și apoi creează un idx2 pe (col1,col2) indice compozit  
  Ambele interogări folosesc idx2  

(3) Dacă există ambii indici idx1 și idx2  
  Nu este acolo unde col1='A' folosește idx1; unde col1=A și col2=B folosesc idx2.  
  Optimizatorul său de interogări folosește unul dintre indicii utilizați anterior frecvent. Folosește fie idx1, fie idx2.  
   
Se poate observa că
(1) Pentru un tabel, dacă există un indice compus pe (col1, col2), nu este nevoie să se creeze un singur indice pe col1 în același timp.
(2) Dacă condițiile de interogare o cer, poți adăuga indicele compus pe (col1, col2) când există deja un singur indice pe col1, ceea ce poate îmbunătăți eficiența într-o anumită măsură.
(3) Nu există beneficii deosebit de mari în stabilirea unui indice compozit cu mai multe câmpuri (conținând 5 sau 6 câmpuri) în același timp; relativ vorbind, stabilirea unui indice cu mai multe câmpuri înguste (conținând doar unul, sau cel mult 2 câmpuri) poate obține o eficiență și flexibilitate mai bune.



5. Trebuie să acopăr interogarea?
În general, este mai bine să nu folosești o strategie care pune accent pe acoperirea completă a interogărilor. Dacă toate coloanele din clauza Select sunt suprascrise de un indice neclusterat, optimizatorul va recunoaște acest lucru și va oferi performanțe bune. Totuși, acest lucru duce adesea la un indice prea larg și la o dependență excesivă de probabilitatea ca optimizatorul să folosească polița. De obicei, indicii îngusti sunt folosiți pentru un număr mai mare de interogări, ceea ce oferă performanțe mai bune pentru interogări mari.




Precedent:C# winform previne injectarea SQL
Următor:Coduri de eroare și soluții Dell Server ediția 2013
Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com