Recomandări pentru utilizarea indecșilor în tabele, optimizate pentru memorie

În cazul în care nu există nici un index pentru coloana c1 SQL Server va scana întregul tabel t, și apoi filtru șir de caractere care satisfac c1 = 1. Cu toate acestea, în cazul în care t este un index pentru coloana c1, SQL Server poate căuta direct pentru o valoare de 1 și pentru a obține linia dorită.

Pentru a căuta înregistrările cu o valoare specifică sau interval de valori ale uneia sau mai multor coloane într-un tabel SQL Server poate folosi indexul pentru aceste coloane, care accelerează căutarea înregistrărilor relevante. Utilizarea indexează îmbunătățește tabelele de performanță, stocate pe disc, și tabele sunt optimizate pentru memorie. Cu toate acestea, există unele diferențe în structura indicelui, care ar trebui să fie luate în considerare atunci când se lucrează cu tabele, optimizate pentru memorie. (Indexuri pentru tabelele care sunt optimizate pentru memorie, numit indicele optimizat pentru memorie.) Unele dintre cele mai importante diferențe sunt enumerate mai jos.

indexurile de memorie optimizate trebuie să fie create cu ajutorul CREATE TABLE Instrucțiuni (Transact-SQL). indecși disc pot fi create folosind CREATE TABLE și CREATE INDEX.

Indexuri, optimizate pentru memorie, există numai în memorie. Structura index nu este salvat pe disc, iar operațiunile în indicii de rețea nu sunt înregistrate în jurnalul de tranzacții. Structura indicelui este creat în momentul în care masa este creat în memorie, optimizat pentru memorie ca performanța instrucțiunea CREATE TABLE, iar în cazul în care baza de date începe.

Indexuri, optimizate pentru memorie, sunt de natură universală. Acest lucru înseamnă că toate coloanele incluse în index, iar pentru tabele care sunt optimizate pentru depozitare, nu trebuie să caute marcajele. În loc de a se referi la un indexurile cheie primare, optimizate pentru memorie, o memorie include un pointer la șirul real în structura de date tabel.

Conceptele de fragmentare și raportul taxei aplicabil indici care este optimizat pentru memorie. Pentru un index pentru a fi salvate pe disc, fragmentarea înseamnă că paginile B-arbori sunt scrise pe disc, fără nici o ordine. Indexuri, optimizate pentru memorie, nu este scris pe disc sau de a citi de pe disc. Factorul de umplere în indici cu structura într-un arbore echilibrat stocat pe disc, - gradul în care structura paginii fizice este populat cu date. structura indicelui optimizat pentru memorie, nu are pagini de dimensiune fixă.

Există două tipuri de indici, optimizate pentru memorie:

Non-cluster indici hash, care sunt create pentru lookup. Pentru mai multe informații despre indexurile hash, a se vedea. Indexurile Secțiunea hash. .

indici care sunt create pentru intervalul de scanare și a comandat o scanare non-cluster.

Atunci când se utilizează un indice hash pentru a avea acces la date printr-un tabel hash în memorie. Indicii Hash au pagini și au întotdeauna o dimensiune fixă. Cu toate acestea indicele hash poate cuprinde un hash containere goale, ceea ce duce la o pierdere nesemnificativă de spațiu. Valorile returnate de interogare folosind un index hash, nu sunt sortate. Indicii Hash sunt optimizate pentru egalitate index de căutare predicate și să sprijine scanări complete de index.

Indicii non-cluster (nu hash coduri), toate suport care acceptă coduri hash precum operațiunea de căutare în predicatele (mai mult sau mai puțin) și ordinea de sortare. Șiruri pot fi obținute în ordinea specificată la crearea indicelui. În cazul în care ordinea de sortare a indicelui coincide cu ordinea de sortare aveți nevoie pentru o anumită cerere, de exemplu, în cazul în care cheia de index coincide cu o propunere ORDER BY, nu este nevoie de a sorta siruri de caractere, ca parte a interogării. Memoria Optimizat indici unidirecțional non-cluster. Ei nu acceptă eliminarea de rânduri, în ordinea de sortare, revenirea la ordinea indicelui de sortare. De exemplu, pentru un indice definit ca (ASC c1), este imposibil de a scana indexul în ordine inversă (DESC c1).

Fiecare indice folosește memorie. Codurile hash folosesc o dimensiune de memorie fixă, care depinde de numărul de containere. În indicii non-cluster consumul de memorie este o funcție de numărul de linii și dimensiunea coloanelor cheie index cu unele costuri suplimentare, în funcție de volumul de muncă. Indexul de memorie optimizat pentru memorie, - o memorie suplimentară, care este separată de memorie utilizată pentru stocarea de rânduri în tabele, optimizate pentru memorie.

duplicat chei împărtășesc întotdeauna același container hash. În cazul în care indicele hash conține multe valori-cheie duplicat, rezultată hashingul cu lanț lung degrada performanța. conflictele Hash care apar în orice indice de distribuire a reduce ulterior performanța în acest scenariu. Din acest motiv, în cazul în care numărul de indicele cheie unică de cel puțin 100 de ori mai mic decât numărul de rânduri, puteți reduce riscul de hash a conflictelor, creșterea numărului de containere (de cel puțin opt ori mai mare decât numărul de chei index unic, consultați Determinarea numărului corect pentru containerele hash indici pentru mai multe informații), sau puteți elimina complet conflictele hash, folosind indicele non-grupată.

Fiecare optimizat pentru o tabelă de memorie trebuie să conțină cel puțin un index. Vă rugăm să rețineți că fiecare constrângere cheie primara creează implicit un index. Prin urmare, în cazul în care un tabel are o cheie primară, are un indice. Cheia primară este obligatorie pentru calcul tabelar fiabil optimizat pentru memorie.

Când vi se solicită, de memorie optimizat tabel de performanță hash indici mai mare dacă propoziția predicatul conține numai predicate de egalitate. Predicatul trebuie să conțină toate coloanele din index-cheie hash. Indicele hash va reveni la scanarea inegalității predicat.

Coloana din tabelul care este optimizat pentru memoria poate fi parte dintr-un indice de hash și indicele non-cluster.

Atunci când se solicită o tabelă de memorie optimizat cu inegalitatea predicatele indici non-cluster au performanțe mai bune decât indicii hash non-cluster.

Pentru este necesară cheia de index hash (pentru un hash) pentru a găsi în index. Dacă cheia de index este împărțit în două coloane, și vă oferă doar prima coloană în SQL Server nu este o cheie completă hash. Acest lucru va avea ca rezultat un plan de interogare de scanare de index. Coloanele pe care doriți să le indice, determinat în practică.

În cazul în care mai mult de o linie în indexul coloană non-cluster conține aceeași valoare (coloanele index cheie conțin multe valori duplicate) de actualizare de performanță, inserare și ștergere poate fi redusă. O modalitate de a îmbunătăți performanța în această situație - pentru a adăuga o altă coloană la un index non-cluster.

Index operațiuni optimizate pentru memorie stocate pe disc.

indicele Nonclustered hash-optimizat de memorie

-Grupate non index care este optimizat pentru memorie

articole similare