Saturday, April 12, 2014

Rakstā aprakstīts un ar ilustrācijām parādīts, kā dati tiek glabāti un meklēti tabulā, kurai ir klus


Rakstā aprakstīts un ar ilustrācijām parādīts, kā dati tiek glabāti un meklēti tabulā, kurai ir klusterēts indekss. Aprakstītas indeksu mail forwarding lapas  īpašības. Līdzīgi kā rakstā " Tabula bez klusterētā (clustered) indeksa ", tiek aprakstīts vienkāršākais gadījums, kad tabula atrodas vienā failā un netiek izmantota datu dalīšana vairākās daļās (partitioning). Aprakstot klusterētos indeksus, mail forwarding tiks pamainīts veids, kā tiek attēlota mail forwarding lapa:
Šajā mail forwarding gadījumā tiek noņemtas bultiņas no rindas sākuma mail forwarding rādītājiem uz rindām. Joprojām lapai ir (1) galvene, (2) datu rindu sadaļa un (3) rindu nobīdes ( row offset ) no lapas sākuma sadaļa. Klusterēto indeksu gadījumā šīs bultiņas netiek attēlotas tāpēc, ka turpmāk rakstā tām nebūs būtiskas nozīmes. Datu glabāšana tabulā, kurai ir klusterēts (clustered) indeks
Attēlā mail forwarding redzams, kā tiek glabāti dati tabulā, mail forwarding kurai ir klusterētais indekss. Kā redzams attēlā, ir vairākas būtiskas atšķirības no tabulas, bez klusterētā indeks. Pirmkārt, tiek izmantota kokveida struktūra, otrkārt, lapas veido divkārši saistītu sarakstu, treškārt, datu lapas (pēdējais mail forwarding līmenis) izskatās līdzīgi kā iepriekš, tomēr pārējajos koka līmeņos tās izskatās būtiski savādāk, ceturtkārt, attēlā nav attēlota IAM lapa (" Datu glabāšana SQL Server "). Bet par visu pēc kārtas. Kas ir klusterēts (clustered) indekss Atšķirībā no tabulas bez klusterēta indeksa, tabula ar klusterētu indeksu sakārto datus konkrētā secībā. divas būtiskākās lietas, kas jāzina par tabulu ar klusterēto indeksu- (1) dati ir sakārtoti fiziski pareizā mail forwarding secībā, arī lapas ir savstarpēji saistītas tādā veidā, lai tiktu ievērota sakārtojuma secība. Katrai lapai ir rādītājs uz nākamo un iepriekšējo lapu un (2) ja šādā tabulā ir vairāk kā viena lapa, tad tiek izmantotas īpašas indeksu lapas, ar kuru palīdzību tiek būtiski uzlabota meklēšana šādā tabulā. Kā redzams iepriekšējā attēlā- datu lapas kopā ar indeksu lapām savā starpā veido kokveida struktūru. Koka saknē vienmēr ir indeksu lapa, savukārt koka beigu virsotnēs- ir datu lapas.  Indeksu lapas Indeksu lapa, lai arī rakstā izmantotajos attēlos ir zīmēta mazāka, realitātē ir tieši tāda paša izmēra, kā datu lapa- respektīvi- 8 KB datu. Indeksu lapa attēlota šādi:
Atšķirībā no datu lapām, indeksu mail forwarding lapās glabājas cita veida informācija- atslēgas zemākā vērtība lapā + PID ( page ID )- tātad lapa, kurā atrodas dati, kuru mazākā atslēga ir norādīta indeksā. Atslēga ir tās kolonnas vērtība, kura tiek izmantota kā indeksējamā kolonna mail forwarding (piezīme- var veidot klusterēto indeksu arī uz vairākām kolonām vienlaicīgi, bet vienai tabulai nevar būt vairāk kā viens klusterēts indekss). mail forwarding No tā izriet, ka indeksu lapās ļoti kompaktā veidā var adresēt daudz datu lapu. Precīzi lai izrēķinātu būtu vajadzīgs zināt kolonnas, uz kā ir klusterētais indekss, garumu. Var secināt, ka jo mazāka ir klusterētā mail forwarding indeksa kolonna(s), jo mazāk indeksa lapu jāizmanto, jo potenciāli īsāks ir meklēšanas ceļš no indeksa sākuma līdz datu rindai. IAM lapas Kā minēts rakstā Datu glabāšana SQL Server  katrai tabulai un katram indeksam ir vismaz viena IAM lapa. Attēlā lapa nav parādīta, tāpēc, ka indeksa sākuma lapa ir daudz būtiskāka par IAM lapu. Praktiski arī tabulai ar klusterēto indeksu ir IAM lapa, kurā tiek glabāta mail forwarding informācija par indeksam piederošajām lapām un Extents. Datu rindu mainīšana/pievienošana Ja vēlamies ievietot jaunu datu rindu, situācija attēlā: 
Tas, kas ir noticis, ir lapu dalīšanās ( page split ). Identiski notiktu arī gadījumā, ja mēs mainītu rindas datus tā, ka rinda vairāk neietilpst tajā pašā lapā (būtiski atšķirība no  Tabula bez klusterētā (clustered) indeksa - ja ir klusterētais indeks, tad nevar rasties pāredresējošie mail forwarding ieraksti).  Lapu dalīšanās laikā, SQL Server vienu lapu sadala divās, aptuveni vienādās daļās , jaunā lapa tiek pareizi sasieta ar pārējām lapām (rādītāji uz iepriekšējo un nākamo lapu). Jaunais mail forwarding ieraksts atrod savu vietu tajā lapā, kur pēc klusterētā indeksa nosacījumiem tam būtu jāatrodas  Piemērs: mail forwarding Lapu dalīšanās (Page splits) . Indeksu lapā arī tiek pievienots jauns ieraksts (katrs indeksu lapas ieraksts atbild par vienu lapu). Gadījumā, ja indeksu lapā nepietiek vietas jaunajam ierakstam, arī tajā notiek lapas dalīšanās identiskā veidā.  Pēc atēla redzams, ka lapu dalīšanās ietver sevī samērā daudz darba. Tātad, no tā arī var izdarīt secinājumu, ka jo mazāk notiek lapu dalīšanās, jo labāk.  Datu rindu dzēšana Datu rindu dzēšana pēc būtības ir vienkārša. Vienīgais ko šeit būtu vērts atzīmēt ir tas, ka gadījumā, mail forwarding ja lapā vairāk nav ierakstu, tad lapa tiek "izslēgta" no ķēdes un to var izmantot citām vajadzībām. atšķirībā mail forwarding no tabulām bez klusterētā indeksa, lapu atbrīvošana notiek līdz ar pēdējās rindas dzēšanu no lapas (tabula mail forwarding bez klusterētā indeksa, lapas atbrīvo tikai īpašos gadījumos- to var izlasīt maziem burtiņiem šeit . Lapu ne-atbrīvošana mulsināja veidojot  Piemērs: pāredresētie ieraksti (Forwarded records) ).  Datu meklēša

No comments:

Post a Comment