Indice non-clustered
- Poate fi folosit de multe ori la o masă
- Mai rapid pentru operațiile de inserare și actualizare decât indexul grupat
Ambele tipuri de indexuri îmbunătățesc performanța atunci când selectează date cu câmpuri care utilizează indexul, dar operații de actualizare și de inserare lentă.
Din cauza inserției lente și a actualizării, indicii grupați trebuie să fie setați într-un câmp care este de obicei incremental, adică Id sau Timestamp.
SQL Server utilizează de obicei indexul numai dacă selectivitatea acestuia este mai mare de 95%.
răspunsul dat de Martynnw la 22 mai 17 la 9:17
Nu trebuie să vă faceți griji cu privire la ceea ce este x. Tot ce trebuie să știți este că pentru o aplicație cu milioane de utilizatori x aceasta va fi semnificativă - Până la 22 mai 1717 la 9:17 am
Există, de asemenea, considerente de stocare. Când inserați rânduri într-o tabelă fără index indexat, rândurile sunt stocate strâns pe o singură pagină, iar actualizarea liniei poate determina linia să se deplaseze la sfârșitul tabelului, lăsând spațiu gol și fragmentând tabela și indexurile. - Jeremiah Peschka 22 mai 17 la 9:17
@StephaniePage: Mă întreb cum va fi măsurată această "selectivitate"? Un index care are o valoare pentru 999.900 de înregistrări și o valoare pentru 100 poate fi foarte util, dacă el o folosește vreodată pentru a căuta 100. - supercat 22 mai 17 la 9:17
Ideea că 95% din înregistrări ar trebui să fie unice este o iluzie. Să presupunem că aveți o masă cu 1.000.000 de rânduri și că indexați o coloană cu 500.000 de chei. 0% sunt unice, dar fiecare cheie returnează 2 dintr-un milion de rânduri. Acest indice este absolut util, indiferent de faptul că 0% din înregistrări sunt unice. - Stephanie Page 22 Mai 17 la 9:17
De exemplu, dacă cineva a început cu o bază de date fără grupuri goale și a adăugat 10.000 de intrări într-o secvență aleatorie, intrările vor fi probabil adăugate la final în ordinea în care au fost adăugate. Citirea bazei de date în funcție de index va necesita 10.000 de citiri unice. Cu toate acestea, dacă utilizați o bază de date în grup, sistemul poate verifica dacă fiecare înregistrare este adăugată dacă înregistrarea anterioară a fost stocată singură; Dacă constată că acesta este cazul, poate scrie această înregistrare cu una nouă la sfârșitul bazei de date. Apoi se putea uita la înregistrarea fizică din fața sloturilor în care se aflau înregistrările mutate și vedea dacă înregistrarea care a urmat a fost păstrată de la sine. Dacă constată că acesta este cazul, poate transfera această înregistrare în acest loc. Folosirea unei astfel de abordări ar face ca mai multe înregistrări să fie grupate în perechi, potențial dublând viteza citirii secvențiale.
Răspunsul a fost dat supercat pe data de 22 mai 1717 la ora 9:17
Indexurile clustere funcționează bine pentru intervale (de exemplu, selectați * din tabelul my_table, unde my_key este între @min și @max)
În unele cazuri, DBMS nu va trebui să efectueze sortarea dacă utilizați instrucțiunea de comandă.
Indicii clusteriți pot lentă inserții, deoarece aspectul înregistrărilor fizice trebuie să se schimbe pe măsură ce intrările sunt introduse, în cazul în care tastele noi nu sunt în ordine succesivă.
răspunsul dat de Giovanni Galbo la 22 mai 17 la 9:17
Indexul cluster este, în esență, o copie sortată a datelor din coloanele indexate.
Principalul avantaj al indexului clustered este că atunci când interogarea (căutarea) găsește date în index, atunci nu este necesară completarea I / O pentru a recupera aceste date.
Supravegherea menținerii unui indice în grup, în special într-o tabelă actualizată frecvent, poate conduce la performanțe slabe și, din acest motiv, ar putea fi preferabil să se creeze un indice nonclustered.
răspuns dat de Ed Guiness 22 mai 17 la 9:17
Un indice cluster descrie de fapt ordinea în care înregistrările sunt stocate fizic pe disc, astfel încât să puteți avea doar una.
Un index nonclustered definește o ordine logică care nu se potrivește ordinii fizice de pe disc.
răspunsul dat de Josh pe 22 mai 17 la 9:17