Klusteroidut ja ryhmittämättömät hakemistot kuvattu

  • 11.11.2019
  • 4 minuuttia aikaa lukea
    • M
    • M
    • C
    • M
    • r
    • +9

Koskee: SQL Server (kaikki tuetut versiot) Azure SQL -tietokanta

Hakemisto on levylle rakenteellinen taulukko tai näkymä, joka nopeuttaa rivien hakua taulukosta tai näkymästä. Hakemisto sisältää avaimet, jotka on rakennettu yhdestä tai useammasta taulukon tai näkymän sarakkeesta. Nämä avaimet on tallennettu rakenteeseen (B-puu), jonka avulla SQL Server löytää nopeasti ja tehokkaasti avainarvoihin liittyvät rivit tai rivit.

Taulukko tai näkymä voi sisältää seuraavan tyyppisiä hakemistoja:

  • Klusteroitu

    • Ryhmätetyt hakemistot lajittelevat ja tallentavat tietorivit taulukkoon tai näkymään niiden avainarvojen perusteella. Nämä ovat indeksimääritelmän sarakkeita. Taulukkoa kohden voi olla vain yksi klusteroitu hakemisto, koska itse tietorivit voidaan tallentaa vain yhdessä järjestyksessä.
    • Taulukon tietorivit tallennetaan lajiteltuun järjestykseen vain silloin, kun taulukko sisältää klusteroidun hakemiston. Kun taulukossa on klusteroitu hakemisto, taulukkoa kutsutaan klusteroiduksi taulukoksi. Jos taulukossa ei ole klusteroitua hakemistoa, sen tietorivit tallennetaan järjestämättömään rakenteeseen, jota kutsutaan kasaksi.
  • Ei klusteroitua

    • Ryhmittymättömissä hakemistoissa on rakenne erillinen tietoriveistä. Klusteroimaton hakemisto sisältää ryhmittymättömät hakemistoavainarvot ja jokaisella avainarvomerkinnällä on osoitin avainarvon sisältävälle tietoriville.

    • Kohdistin indeksoimattoman hakemistoriviltä hakemistoa tietoriville kutsutaan rivinhakijaksi. Rivinpaikannimen rakenne riippuu siitä, tallennetaanko tietosivut kasaan vai klusteroituun taulukkoon. Kasaa varten rivin paikannin on osoitin riville. Klusteroidussa taulukossa rivinhakija on klusteroitu hakemistoavain.

    • Voit lisätä ei-sarakkeita ryhmittymättömän indeksin lehdetasolle ohittamaan olemassa olevat hakemistonäppäinrajat, ja suorittaa täysin peitetyt, indeksoidut kyselyt. Lisätietoja on ohjeaiheessa Hakemistojen luominen mukana olevilla sarakkeilla. Lisätietoja hakemistonäppäinrajoista on kohdassa SQL Serverin enimmäiskapasiteettimääritykset.

Sekä klusteroidut että ryhmittymättömät indeksit voivat olla yksilöllisiä. Tämä tarkoittaa, ettei kahdella rivillä voi olla sama arvo hakemistoavaimelle. Muussa tapauksessa hakemisto ei ole yksilöllinen ja usealla rivillä voi olla sama avainarvo. Lisätietoja on ohjeaiheessa Yksilöllisten hakemistojen luominen.

Hakemistoja ylläpidetään automaattisesti taululle tai näkymälle aina, kun taulukon tietoja muokataan.

Katso erityistarkoitusten hakemistotyyppejä kohdasta Hakemistot.

Hakemistot ja rajoitukset

Hakemistot luodaan automaattisesti, kun taulukon sarakkeissa määritetään ENSISIJAISET AVAIMET ja YKSITYISKOHTAISET rajoitukset. Esimerkiksi kun luot taulukon, jolla on UNIQUE-rajoitus, Database Engine luo automaattisesti hakemattoman hakemiston. Jos määrität ENSIMMÄISEN Avaimen, Database Engine luo automaattisesti klusteroidun indeksin, ellei klusteroitua hakemistoa jo ole. Kun yrität pakottaa PRIMARY KEY -rajoituksen olemassa olevaan taulukkoon ja taulukossa on jo klusteroitu hakemisto, SQL Server pakottaa ensisijaisen avaimen käyttämään ryhmittymätöntä hakemistoa.

Lisätietoja on ohjeaiheissa Ensisijaisten avainten luominen ja Luo yksilöllisiä rajoituksia.

Kuinka kyselyoptimoija käyttää hakemistoja

Hyvin suunnitellut hakemistot voivat vähentää levyn I / O-toimintoja ja kuluttaa vähemmän järjestelmäresursseja, mikä parantaa kyselyn suorituskykyä. Hakemistot voivat olla hyödyllisiä useille kyselyille, jotka sisältävät SELECT-, UPDATE-, DELETE- tai MERGE-lauseita. Harkitse kyselyä SELECT Title, HireDate FROM HumanResources.Employee WHERE EmployeeID = 250 AdventureWorks2012-tietokannassa. Kun tämä kysely on suoritettu, kyselyn optimoija arvioi jokaisen käytettävissä olevan menetelmän tietojen hakemiseksi ja valitsee tehokkaimman menetelmän. Menetelmä voi olla taulukon skannaus tai se voi skannata yhtä tai useampaa hakemistoa, jos niitä on.

Kun suoritat taulukon skannausta, kyselyn optimoija lukee kaikki taulukon rivit ja poimi rivit, jotka täyttävät kyselyn ehdot. Taulukon skannaus tuottaa monia levyn I / O-toimintoja ja voi olla resursseja kuluttava. Taulukon skannaus voi kuitenkin olla tehokkain tapa, jos esimerkiksi kyselyn tulosjoukko on suuri prosenttiosuus taulukon riveistä.

Kun kyselyn optimoija käyttää hakemistoa, se etsii hakemistonäppäinsarakkeet, etsii kyselyn edellyttämien rivien tallennuspaikan ja poimi vastaavat rivit kyseisestä sijainnista. Yleensä hakemistosta haku on paljon nopeampi kuin taulukosta etsiminen, koska toisin kuin taulukossa, hakemisto sisältää usein vain vähän sarakkeita riviä kohden ja rivit on järjestetty.

Kyselynoptimoija valitsee tyypillisesti tehokkaimman tavan kyselyitä suoritettaessa. Jos hakemistoja ei kuitenkaan ole käytettävissä, kyselyn optimoijan on käytettävä taulukon skannausta. Sinun tehtäväsi on suunnitella ja luoda ympäristölle parhaiten sopivia hakemistoja, jotta kyselyn optimoijalla on valikoima tehokkaita hakemistoja, joista valita. SQL Server tarjoaa Database Engine Tuning Advisorin, joka auttaa tietokantaympäristön analysoinnissa ja sopivien hakemistojen valinnassa.

Tärkeää

Lisätietoja hakemistosuunnittelun ohjeista ja sisäiset, katso SQL Server Index Design Guide.

  • SQL Server Index Design Guide
  • Luo klusteroituja hakemistoja
  • Luo ei-klustereita Hakemistot

Leave a Reply

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *