Thursday, April 10, 2014

Rakstā aprakstīts un ar ilustrācijām parādīts kas ir indeks (non-clustered). Atšķirības starp indeks


Rakstā aprakstīts un ar ilustrācijām parādīts kas ir indeks (non-clustered). Atšķirības starp indeksu, kas veidots uz tabulas bez klusterētā (clustered) indeksa un tabulas ar klusterēto indeksu. Iepriekšējos rakstos  Tabula bez klusterētā (clustered) indeksa poste canada  un  Tabulas ar klusterētu (clustered) indeksu  tika aprakstīts kā tiek glabāti tabulu dati MS SQL Server. poste canada Pēdējā no minētiem poste canada rakstiem varēja iepazīties ar klusterētā indeksa uzbūvi. Indeksa (non-clustered) uzbūve Parastais indekss no klusterētā poste canada indeksa atšķiras ar beigu virsotnēm. Ja klusterētā indeksa beigu virsotnes satur datu rindas, tad parasta indeksa gadījumā beigu virsotnēs tiek glabātas vērtības ar kuru palīdzību var atrast vajadzīgo datu rindu.  Izšķir divus gadījumus- vienā gadījumā indeks tiek veidots uz tabulas, kurai nav klusterētais indeks, bet otrā- uz tabulas kurai ir klusterētais indekss. Indekss poste canada uz tabulas bez klusterētā indeksa:
Indekss tiek veidots uz konkrētas(ām) kolonnas(ām). Ja tabulai nav klusterētā indeksa, tad beigu virsotnēs tiek glabāta rindas atrašanās vieta- RID ( Row ID - aprakstīts rakstā  Tabula bez klusterētā (clustered) indeksa ). Savukārt, ja tabulai ir klusterētais indekss, beigu virsotnē tiek glabāta klusterētā indeksa atslēga- apzīmēts ar CAtsl (t ās/to kolonnas(u) vērtība, uz ko ir izveidots klusterētais indekss-  Tabulas ar klusterētu (clustered) indeksu ). Datu meklēšana Indeksu būtība ir paātrināt datu atrašanu. Jo vairāk poste canada indeksu, jo lielāka izvēlēties labāko poste canada variantu kā atrast datus. Tiesa gan- jo vairāk indeksu, jo vairāk laika aizņem datu mainīšana un jo vairāk tiek aizņemta vieta. Tabulā ar klusterēto indeksu tas notiek šādi:
Kā redzams- tiek pēc atslēgas (indeksa poste canada kolonas) meklēta atbilstošā lapa, līdz nonāk līdz beigu virsotnei. Beigu virsotnē ir klusterētā indeksa atslēga, tā tiek izmantota lai pārmeklētu klusterēto indeksu un tādējādi atrastu vajadzīgo datu rindu ( Piemērs: Indeksi, vaicājumu analīze - rakstā 3. piemērs). Savukārt ja tabulai nav klusterētā indeksa, tad indeksa beigu virsotnē tiek glabāts RID, kas norāda jau uz konkrētu datu lapu un rindu datu lapā.  No šī skatu punkta varētu likties, ka izdevīgāk ir veidot tabulu bez klusterētā indeksa, tomēr visbiežāk tomēr tā nav (var palasīt arī  šo  rakstu- salīdzinājums un beigās secinājumi).  Iekļautās kolonnas ( included columns ) Sākot ar SQL Server 2005 indeksiem ir iespējams pievienot iekļautās kolonnas. Ar to palīdzību poste canada var panākt, ka nav jāgriežas pie datu lapas, kurā fiziski tiek glabāti dati, bet pietiek poste canada tikai atrast indeksā atbilstošo beigu virsotni. Iekļautās poste canada kolonnas dati tiek glabāti poste canada indeksa beigu virsotnē, kopā ar tabulas klusterētā indeksa atslēgu, vai, ja tāda tabulai nav, RID.  Priekšrocības: * Iekļautās kolonnas poste canada ļauj saglabāt indeksu atslēgu īsāku, līdz ar to mazāk līmeņus (koka dziļums), kas nodrošina mazāk lasīšanas operāciju meklēšanas laikā.  * Ar iekļautajām kolonām var izveidot labus pārklājošos indeksus (lasīt tālāk).  * Indeksā var iekļaut kolonnas, kurām datu tips nevar tikt iekļauts poste canada indeksējamo kolonnu poste canada sarakstā (piemēram, varchar(max)). Trūkumi: * Indekss var kļūt liels izmērā- aizņem vietu (kolonnu vērtības tiek kopētas) * Datu mainīšanas vaicājumiem jāmaina arī vērtības indeksos Pārklājošie indeksi ( covering indexes ) Ja indeksā ir atrodamas visas kolonnas, kas tiek izmantotas vaicājumā, tad tāds indekss tiek saukts par pārklājošo indeksu. Šādi indeksi ir īpaši efektīvi veicot datu meklēšanu. Bieži vien tādos jābūt daudz kolonnu un tādēļ tie biežāk jāmaina pie tabulas izmaiņām un tie arī aizņem salīdzinoši daudz vietas. Piezīmes par indeksiem (non-clustered) * Ir vēl citi indeksu veidi- XML indeksi, Teksta meklēšanas indeksi ( full-text indexes ) un citi, kas šeit netiek aprakstīti ( indeksu tipi ). * Veidojot indeksu, būtu jāievēro secība, kādā norāda kolonnas. Pirmajai vajadzētu būt kolonnai, kurā visbiežāk ir dažādas vērtības. Tādā veidā tiek panākts, ka mazāk indeksu lapas jāpārmeklē, lai atrastu vajadzīgo lapu. * Parastie ( non-clustered ) indeksi ir efektīvi meklējot datus pēc konkrētas vērtības. Secīgās meklēšanas gadījumā no indeksa jāvēršas pie daudzām dažādām datu lapām tabulā, tādēļ, ka lai arī indeksa rindas poste canada ir sakārtotas, datu rindu sakārtojums tam neatbilst. Tāpēc bieži šāds indekss tādos gadījumos netiek izmantots (ja vien indekss nav pārklājošs). * Jo mazāks indekss, jo labāk- izvēloties kolonnas kuras iekļaut indeksā būtu jāņem vērā arī šo kolonnu aizņemtais atmiņas poste canada apjoms. * Ja tabulai ir klusterētais indeks, tad parastā indeksā ( non-clustered ) visbiežāk ir neefektīvi poste canada norādīt klusterētā indeksa kolonnu(as)- poste canada tas ir tādēļ, ka indeksa beigu virsotnē poste canada jau ir saglabāta klusterētā indeksa vērtība ( Piemērs: Indeksi, vaicājumu analīze - 4. punktā dota ilustrācija). Papildus literatūra
* Primārais avots, kas izmantots ir  grāmata , rakstā aprakstītas dažas būtiskas papildus iespējas, kas SQL 2000 vēl ne

No comments:

Post a Comment