h1

Totul despre indecsi

November 10, 2009

Rolul indecsilor: (accelereaza regasirea datelor)

–          Accelereaza accesul la date

–          Obliga unicitatea inregistrarilor (doar la coloane UNIQUE este indicat sa cream indecsi , in special la coloanele folosite in mod frecvent;) )

Dezavantaje indecsi:

–          Consuma spatiul discului .

Cand updatam o coloana/camp indexat , SQL Server updateaza indecsii asociati

Mentinerea indecsilor necesita timp si resurse. Nu create un index dk nu-l veti folosi frecvent nu-si are rostul!!!!

Indecsii pe coloane ce nu-s UNIQUE (deci contin duplicate) nu-si au rostul!!!!!

Sp_helpindex – procedura stocata sistem care este executata asupra unei tabele.

Indecsi doar la date de tipul UNIQUE.

Un index este creat intr-o tabela pt.a gasi datele mult mai rapid si eficient.

Utilizatorul nu poate vedea indecsii , ei sunt folositi pt. a accelera cautarile/query-urile.

Obs. UPDATE la o tabela care contine indecsi dureaza mai mult decat o tabela ce nu contine indecsi , deoarece indecsii necesita un updata.

Deci va trebui sa cream indecsi doar pe coloanele (si tabelele) care vor fi folosite frecvent la cautari.

Deasemenea indecsi non-clustered au nevoie de clauza ORDER BY (pt.sortare) pe cand indecsii clustered sunt implicit sortati (deci nu au nevoie de clauza ORDER BY).

CREATE INDEX –creeaza un index creat pt.campuri PRIMARY KEY si UNIQUE (constrangeri), dar se pot crea si pt.chei externe,chei foreign (o coloana contine niste valori intr-o tabela care se regasesc intr-o alta tabela2 cu acelasi nume de coloana si aceleasi valori).

Pentru stergerea unui index exemplu complet:

Sau se poate folosi :

DROP INDEX Produse.Index1 –stergem index-ul cu numele Index1 din tabela Produse

Obs. DROP INDEX nu se poate folosi pt.campurile cu constrangerile de primary key sau UNIQUE.

DROP INDEX nu poate fi folosit asupra tabelelor sistem.

Iata cum se poate crea un index (CREATE INDEX) si sterge un index (DROP INDEX) . Dupa cum se observa index-ul este creat pt.o anumita coloana dintr-o anumita tabela. Motivul : imbunatatirea cautarilor (cautarile frecvente pt.o coloana -acea coloana trebuie indexata) si rapiditatea si eficienta query-urilor.

Obtinerea informatiilor despre un index

Se va folosi procedura stocata sistem sp_helpindex.

Deci scopul folosirii indecsilor pt o anumita coloana.

Daca avem milioane de inregistrari si vrem sa cautam intr-o coloana care are milioane de valori vom face coloana respectiva un index si apoi facem cautare folosind clauza WHERE iar timpul necesar query-ului va fi redus deoarece coloana respectiva a fost facuta index.

Pentru schimbarea numelui unui index se foloseste procedura stocata sp_rename. (sau din se acceseaza object explorer, se selecteaza index-ul, F7 si apoi F2 pt.modificarea numelui).

Exista 2 tipuri de indecsi clustered si nonclustered (cei non-clustered asigura sortarea, cei clustered sunt sortati automat, au avantajul ca cererile sunt executate mult mai rapid, consuma mai putina memorie indecsi clustered si trebuie sa avem un singur index clustered daca este definit deja unul trebuie sters acel index al tabelei pt.ca putem avea doar un singur index clustered per tabela. Se va folosi optiunea DROP_EXISTING pt.stergerea index-ului clustered.)

Se pot afla intr-o tabela pana la 247 indecsi non-clustered. (dupa altii putem avea 249 nonclustered index per tabel.)

Ce campuri se indexeaza F.F.IMP:

–          cheile primare

–          cheile straine (FOREIGN KEYS dintr-o tabela)

–          -cheile externe

–          coloane accesate intr-o ordine de sortare

–          coloane grupate impreuna in timpul agregarilor

Cand nu trebuie sa cream indecsi:

–          Referinta dintr-un query

–          Contine cateva valori UNIQUE. De exemplu un index al unei coloane cu 2 valori (male si female), intoarce un procent mare de randuri.

–          Campurile de tip text,ntext sau image nu pot fi indexate NEVER INDEX!!!

Exista 2 tipuri de indecsi CLUSTERED SI NONCLUSTERED

Indecsii CLUSTERED

–          Reprezinta un index in care inregistrarile din campul respective sunt ordonate crescator! – se poate realize un singur index cluster (deci o singura coloana va fi index clustered cu conditia ca ea sa aiba coloanele ordonate crescator) O SINGURA TABELA POATE AVEA UN SINGUR INDEX CLUSTER(pe o pagina ce contine date, datele vor fi stocate in ordinea ascendenta)

–          Verificati ca aveti spatiu de memorie necesar in BD cand create indecsi cluster

Indecsi NONCLUSTERED

–          Este construit deasupra heap-ului ( ce contine o colectie de pagini) -> se vor folosi identificatori pt.randuri in paginile indexate care vor conduce catre inregistrarile din paginile respective

–          Cand este construit deasupra unei tabele cu un index cluster, SQL Server foloseste o cheie CLUSTER in paginile de indexare care vor ghida catre index-ul cluster

Exemplu de creare indecsi nonclustered:

OBTINEREA INFORMATIILOR despre INDEX

Procedura stocata sp_helpindex (din SQL Server Enterprise Manager) obtine informatia index-ului: nume index,tip index, optiuni pt.o tabela specifica

Use NorthWind

EXEC sp_helpindex Customers

Obtinerea informatiilor despre o tabela sp_help tablename

USE NorthWind

EXEC sp_help  Customers

OPTIUNEA FILLFACTOR

-este aplicata doar cand este creat un index sau reconstruit

OPTIUNEA PAD_INDEX

Specifica procentul de completare al paginilor index non-leaf-level.

EXEMPLU FILLFACTOR

USE NorthWind

CREATE INDEX OrderID_ind

ON Orders(OrderID)

WITH PAD_INDEX, FILLFACTOR = 70

Exemplul de mai jos creeaza OrderID_ind index la campul OrderID in tabela Orders.

USE NorthWind

CREATE INDEX OrderID_ind

ON Orders(OrderID)

WITH PAD_INDEX, FILLFACTOR = 70

Trebuie sa mentinem indecsii pt. a asigura performanta optimal.

OBTINEREA INFORMATIILOR DESPRE INDECSI

Pentru a afla informatii despre indecsi se folosesc urmatoarele proceduri stocate sistem din mssql:

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: