Sunteți pe pagina 1din 5

Indexarea bazelor de date

In aceast lucrare sunt tratai indecsii i rolul acestora n optimizarea timpului de rspuns la interogarea bazelor de date.n prima parte sunt tratate aspectele lehgate de tipurile d eindecsi, modul lor de stocare si categoriile existente, iar n a doua parte sunt explicate comenyile T-SQL referitor la indecsi CREATE, ALTER si DROP INDEX.In final este abordata problema fragmentarii indecsilor si impactul aspura performanei sistemului , fiind deasemenea prezentate o serie de recomandri legate d emodul de creare a indecilor. Sistemele de baze de date utilizeaz indecii pentru a oferi acces rapid la date relaionale. Un index este o structur fizic distinct ce permite ca interogrile s acceseze mult mai rapid tuplele bazei de date.Alegerea potrivit a indecilor se constituie astfel ca un element important de asigurare a performanei sistemului cu baze de date. Dac baza de date nu posed un index SGBD va utiliza o aa numit scanare - table scan, pentru a accesa regsi tuple.Scanarea presupune c regsirea tuplelor este realizat n secven, astfel tuplele sunt extrase corespunztor locaiei lor fizice din memorie, metod mult ineficient fa de utilizarea indecilor. Un index furnizeaza un acces direct i rapid la nregistrrile unei baze de date. Scopul utilizarii indecsilor este reducerea numarului de citiri/scrieri pe disc, prin folosirea unei cai indexate pentru a localiza mai rapid datele Indecii sunt stocai n structuri adiionale de date numite pagini index, similar structurilor de stocare a datelor, astfel pentru fiecare tupl indexat exist o intrare index stocat la nivelul paginii index.Fiecare intrare index conine o cheie index i un pointer fiind din acest motiv de dimensiune mult mai mic dect tupla corespunztoare. Indecii utilizai de sistemul MS SQL server sunt construii bazat pe structuri de date de tipul B Tree, ce posed o structur arborescent, cu frunzele aflate toate la acelai nivel, proprietate meninut chiar dac sunt adugate sau terse date n baza de date.Bazat pe acces indexat sunt necesare mult mai puine operaii de I-O pentru regsirea unei tuple n timp mult mai scurt dect n varianta secvenial. Tipuri de indeci i proprieti Indexul clusterat determin ordinea fizic a datelor n tabel. SGBD-ul permite crearea unui singur index clusterat per tabel deoarece tuplele tabelei pot fi ordonate fizic o singur dat.La utilizarea unui astfel de index, sistemul navigheaz n arborele Btree de la rdcin spre frunze, acestea fiind legate ntr- o list dublu nnuit numit page chain. Un index clusterat este creat n mod implicit pentru fiecare tabel pentru care este definit o constrngere de tip cheie primar, astfel fiecare index clusterat este unic n mod implicit i fiecare valoare de date apare o singur dat n coloana pentru care este definit un index clusterat.Dac un astfel de index este creat pe o coloan nonunic, SGBD-ul va fora unicitatea prin adugarea unui identificator acelor tuple ce posed valori duplicat. Indexul nonclusterat. Un astfel de index are aceeai structur ca i cel clusterat , avnd i dou importante diferene i anume: Indexul nu modific ordinea fizic a nregistrrilor n tabel Paginile frunz ale indexului conin o cheie index i un bookmark. Acesta identific unde se gsete tupla corespunztoare cheii index Ordinea fizic a tuplelor din tabel nu se va modifica dac vor fi definii pentru acea tabel indeci nonclusterai i deasemenea numrul de operaii I-O este mare. Un index este un obiect schema care mbunatateste regasirea nregistrarilor . Indecsii pot fi creai explicit sau automat. Indexul este automat folosit i ntretinut , astfel odat creat indexul nu este necesar nici o intervenie din partea utilizatorului.Indecsii sunt logic i fizic independenti de bazele de date pe care le indexeaz. Acest lucru nseamn c indecsii pot fi creai sau tersi oricnd fr nici un efect asupra bazelor de date sau a altor indeci. Nota: Cnd este ters un tabel, indecii corespunztori sunt de asemenea teri. Sintaxa T-SQL pentru indeci Pot fi create doua tipuri de indeci. Un prim tip l reprezint indexul unic, astfel serverul MS-SQL Server creeaz automat acest index cnd este definit o cheie primar (PRIMARY KEY) sau una unic (UNIQUE KEY), iar numele indexului este definit corelat cu numele dat acestui cmp.

Un al doilea tip de index este indexul mecanic. De exemplu, utilizatorii pot crea astfel de indeci , n mod secific diverselor interogri ale bazei de date cu scopul de a accelera accesul la nregistrarile bazei de date. Crearea unui index. Crearea unui index se face cu instructiunea CREATE INDEX a crei sintax este urmtoarea: CREATE [UNIQUE] [CLUSTERED |NONCLUSTERED] INDEX index_name ON table_name (column1 [ASC | DESC] ,...) [ INCLUDE ( column_name [ ,... ] ) ] [WITH [FILLFACTOR=n] [[, ] PAD_INDEX = {ON | OFF}] [[, ] DROP_EXISTING = {ON | OFF}] [[, ] SORT_IN_TEMPDB = {ON | OFF}] [[, ] IGNORE_DUP_KEY = {ON | OFF}] [[, ] ALLOW_ROW_LOCKS = {ON | OFF}] [[, ]ALLOW_PAGE_LOCKS = {ON | OFF}] [[, ] STATISTICS_NORECOMPUTE = {ON | OFF}] [[, ]ONLINE = {ON | OFF}]] [ON file_group | "default"] unde: Index_ name este numele indexului. Table_ name numele bazei de date. Column1 numele campului n baza de date ce urmeaza a fi indexat. Observaii : Orice coloan din baza de date ,excepie cele ce conin imagini , pot fi indexate. Fiecare index compozit posed anumite restricii legat de lungimea i numrul de coloane, astfel lungimea maxim a unui index este 900 bytes, i poate conine max 16 coloane. Opiunea UNIQUE - specific faptul c fiecare valoare de date poate aprea o singur dat n coloana indexat. Opiunea CLUSTERED specific un index clusterat, iar NONCLUSTERED specific faptul c indexul nu modific ordinea fizic a tuplelor indexate . Este posibil specificare modului de realizare a indexrii per coloan i anume ascendentdescendent (ASC-DESC). Opiunea INCLUDE permite specificarea unei coloane noncheie adugat paginilor frunz ale unui index nonclusterat. Informaii legate de fragmentarea unui index. Pe durata existenei sale un index poate deveni fragmentat, adic stocarea datelor n paginile sale este ineficient. Exist dou forme de fragmentare : intern i extern. Fragmentarea intern specific volumul de date stocat la nivelul fiecrei pagini, iar fragmentarea extern apare dac ordinea logic a paginilor este eronat. Preluarea informaiei legate de nivelul de fragmentare intern poate fi realizat prin utiliyarea unei vederi specifice DMV ( Dynamic management view) sys.dm_db_index_physical_stats astfel : DECLARE @db_id INT; DECLARE @tab_id INT; DECLARE @ind_id INT; SET @db_id = DB_ID('sample'); SET @tab_id = OBJECT_ID('employee'); SELECT avg_fragmentation_in_percent, avg_page_space_used_in_percent FROM sys.dm_db_index_physical_stats (@db_id, @tab_id, NULL, NULL, NULL) Dup vizualizarea informaiei legat de nivelul de fragmentare, este posibil editarea acesteia prin funcii specifice astfel: sys.indexes catalog view

sys.index_columns catalog view sp_helpindex system procedure OBJECTPROPERTY property function SQL Server Management Studio sys.dm_db_index_usage_stats DMV sys.dm_db_missing_index_details DMV Reconstruirea unui index. SGBD MS SQL Server permite modificarea indecilor utiliznd instruciunea ALTER INDEX, instruciune ce poate fi utilizat pentru activiti de mentenan a acestora.Sintaxa acestei instruciuni este similar celei de creare a indexului, permind desemenea o serie de alte opraii cum ar fi : Reconstruirea indexului folosind opiunea REBUILD Reorganizarea paginilor frunz ale indexului fololsind opiunea REORGANIZE Dezactivarea unui index folosind opiunea DISABLE Reconstruirea indexului. Exist trei modaliti prin care un index poate fi reconstruit i anume Utilizarea opiunii REBUILD in sintaxa ALTER INDEX ( posibil cu specificarea ALL) Utilizarea opiunii DROP_EXISTING din sintaxa CREATE INDEX Utilizarea comenzii DBCC DBREINDEX Cea de a doua modalitate este mult mai puternic dect prima deoarece ofer mai muli parametri, ce pot fi utilizai mult mai flexibil, ntre care schimbarea coloanelor parte a indexului, schimbarea unui index clusterat n nonclusterat. Reorganizarea paginilor index. Aceast opiune specific faptul c paginile frunz ale indexului vor fi reorganizate astfel nct ordinea fizic a paginilor se mapeaz la ordinea logig stnga- dreapta a nodurilor frunz, eliminnd astfel parte din fragmentare i asigurnd creterea performanei accesului Dezactivarea indexului asigur eliminarea indexului din lista celor utilizabili pn la proxima sa reactivare.Un index deyactivat nu va fi meninut dac survin modificri ale datelor, pentru aceasta este necesar completa sa reconstruire dac se dorete utilizarea sa. Pentru reactivarea indexului se va utiliza opiunea REBUILD din sintaxa ALTER TABLE. Stergerea i redenumirea unui index. Stergerea unui index din dicionarul de date se realizeaz prin instruciunea DROP INDEX. Aceast operaie o poate efectua doar cel care l-a creat sau are privilegiul DROP ANY INDEX. Operaia de eliminare a unui index clusterat este o operaie costisitoare n resurse sistem , deoarece toi indecii nonclusterai trebuie reconstruii deoarece acetia utilizeaz cheia index a indexului clusterat ca pointer n paginile frunz.Exist i opiunea MOVE TO pentru operaia de tergere prin care se specific locaia la care s se mute tuplele de date aflate n paginile frunz ale indexului clusterat. Not : instruciunea DROP INDEX nu poate fi utilizat pentru a a elimina indeci creai n mod implicit de ctre sistem pentru constngerile de integritate cum ar fi PRIMARY KEY i UNIQUE.Pentru a elimina astfel de indeci trebuie anterior eliminat constrngerea. Aspecte privind crearea i utilizarea indecilor Dei SGBD nu posed nici un fel de limitri practice n ceea ce privete numrul de indeci suportai, este de dorit limitarea acestora din urmtoarele motive : de ex. acetia utilizeaz spaiu disc fiind astfel posibil creterea dimensiunii indecilor peste dimensiunea bazei de date. Deasemenea prin contrast cu beneficiile utilizrii indecilor la regsirea datelor, pentru operaii de inserare i actualizare acetia au un impact negativ,deoarece creterea numrului de indeci ai unei tabele determin creterea numrului de operaii de reorganizare. Este recomandat n general ,crearea unui index s fie realizat pentru urmtoarele situaii : un cmp ce este utilizat des in clauzele Where sau in conditii join cmpuri cu mare varietate de valori cmpuri cu numar mare de valori NULL dou sau mai multe cmpuri ce sunt folosite mpreun frecvent ntr-o clauza WHERE sau ntr-o condiie join baza de date este mare, i majoritatea interogrilor nu vizeaz mai mult de 2-4% din nregistrri

Mai muli indeci ntr-o baz de date nu nseamn n mod automat o optimizare a interogrilor. Fiecare operaie de manipulare a datelor ce se realizeaz ntr-o baz de date ce conine indeci , implic o actualizare a indecilor. Cu ct sunt mai multi indeci asociai tabelului, cu att va dura mai mult pn cnd serverul va actualiza indecii . Nu este necesara crearea unui index atunci cnd: baza de date este mic campurile nu sunt des folosite intr-o conditie majoritatea interogarilor vizeaza mai mult de 2-4% din inregistrari Indeci i condiii n clauza WHERE. Dac clauza WHERE conine o condiie cu o singur coloan , aceasta se va constitui ca i coloan de indexare. Dac n clauz apar mai mai muli operatori AND , este necesar crearea unui index compozit ce include toate coloanele specificate Indeci i operatorul JOIN. n situaia unui operator JOIN, este recomandat indexarea fiecrei coloane JOIN, acste de regul reprezint cheia primar a unei tabele , respectiv cheia strin a celeilalte, crend un index nonclusterat pentru coloana cheii strine , deoarece sistemul va crea implicit un index clusterat pentru coloana cheie primar.O cretere semnificativ de performan este realizat dac toate coloanele din interogare sunt cuprinse n index. ncepnd cu versiunea SQL Server 2005 este posibil ca o coloana calculat s fie marcat n mod explicit ca persistent opiunea PERSISTED , astfel ea va exista fizic alturi de celelalte,opiune necesar pentru coloane calculate generate pe tipuri de date aproximative ( FLOAT, REAL), deoarece un index poate fi creat pentru o coloan calculat doar dac aceasta posed un tip de date precis.Un index pe o coloan calculat poate fi creat doar dac urmtorii parametrii sunt setai ON: QUOTED_IDENTIFIER CONCAT_NULL_YIELDS_NULL ANSI_NULLS ANSI_PADDING ANSI_WARNINGS Concluzii Indecii sunt utilizai pentru a realiza un acces la date mai eficient. Acetia pot afecta att operaiile de tip SELECT ct i cele de manipulare a datelor cum ar fi INSERT, UPDATE sau DELETE.Un index poate fi clusterat sau nonclusterat, unic sau nonunic simplu sau compus.Indexul clusterat sorteay fizic tuplele tabelei n ordinea specificat de coloana de indexare.Un index unic specific faptul c fiecare valoare apare o singur dat pentru coloana acelei tabele. O facilitate deosebit de util legat de crearea i manipularea indecilor , o constituie DTA - Database Engine Tuning Advisor parte a componentei SQL Server numit SQL Server Profiler, ce realizeaz analiza ncrcrii n utilizare a bazei de date i recomand indeci bazat pe acea analiz Exerciii 1. Analizai beneficiile i dezavantajele crerii unui index 2. Creai pentru baza de date Scoala, un index compozit. Analizai pentru ce tipuri de interogri acest index va imbunti performana.Identificai alternative. 3. Cum poate fi ters un index creat n mod implicit pentru cheia primar a unei tabele din baza de date Scoala

S-ar putea să vă placă și