Indeksering i DBMS: Hvad er, typer af indekser med EKSEMPLER

โšก Smart opsummering

Indeksering i databaser er en datastruktureringsteknik, der hurtigt henter poster via mapping.ping en sรธgenรธgle til diskadressen for dens post. Primรฆr, sekundรฆr, klyngedannelse, flerniveau og B-trรฆ indekserer hvert handelsrum, hastighed og vedligeholdelse forskelligt.

  • ๐Ÿ—‚๏ธ Kerneidรฉ: Et indeks er en lille tabel med to kolonner, der parrer en nรธgle med en pointer til postens diskblok.
  • ๐Ÿ“‡ Primรฆrt indeks: En ordnet fil pรฅ nรธglen, opdelt i tรฆtte og sparsomme varianter.
  • ๐Ÿ”Ž Tรฆt vs. sparsom: Et tรฆt indeks gemmer รฉn indgang pr. nรธgle; et sparsomt indeks gemmer fรฆrre indgange for at spare plads.
  • ๐Ÿท๏ธ Sekundรฆrt indeks: Den er bygget pรฅ et ikke-ordnende felt og bruger buckets til at nรฅ alle matchende poster.
  • ๐Ÿ“š ClusterIndeks: Grupperer rรฆkker, der deler en ikke-unik nรธgle, i รฉn klynge.
  • ???? B-trรฆindeks: Et afbalanceret flerniveautrรฆ, hvis sammenkรฆdede bladknuder understรธtter tilfรฆldig og sekventiel adgang.
  • โš–๏ธ Afvejning: Indekserer lรฆser hurtigt, men indsรฆtter, opdaterer og sletter langsomt og bruger ekstra plads.

Indeksering i databasen

Hvad er indeksering?

Indeksering er en datastruktureringsteknik, der giver dig mulighed for hurtigt at hente poster fra en databasefil. Et indeks er en lille tabel med kun to kolonner. Den fรธrste kolonne indeholder en kopi af den primรฆre nรธgle eller kandidatnรธgle til en tabel. Den anden kolonne indeholder et sรฆt af pointers der indeholder adressen pรฅ den diskblok, hvor den specifikke nรธglevรฆrdi er gemt.

Et indeks:

  • Tager en sรธgenรธgle som input.
  • Returnerer effektivt en samling af matchende poster.

Uden et indeks skal databasen scanne hver rรฆkke for at besvare en forespรธrgsel. Med et indeks hopper den direkte til den matchende blok, hvilket er grunden til, at den valgte indekstype har en stor effekt pรฅ ydeevnen.

Typer af indeksering i DBMS

Type af indekser i databasen
Type af indekser i databasen

Indeksering i en database er defineret ud fra dens indekseringsattributter. De to hovedtyper af indekseringsmetoder er:

  • Primรฆr indeksering
  • Sekundรฆr indeksering

Primรฆrt indeks i DBMS

Et primรฆrt indeks er en ordnet fil med fast lรฆngde og to felter. Det fรธrste felt er det samme som den primรฆre nรธgle, og det andet felt peger pรฅ den specifikke datablok. I det primรฆre indeks er der altid en en-til-en-relation mellem posterne i indekstabellen.

Det primรฆre indeks er ogsรฅ yderligere opdelt i to typer:

  • Tรฆt indeks
  • Sparsomt indeks

Tรฆt indeks

I et tรฆt indeks oprettes en post for hver sรธgenรธglevรฆrdi i databasen. Dette hjรฆlper dig med at sรธge hurtigere, men krรฆver mere plads til at gemme indeksposter. I denne metode indeholder poster sรธgenรธglevรฆrdien og peger pรฅ den faktiske post pรฅ disken.

Tรฆt indeks i DBMS

Sparsomt indeks

Et sparse index er en indekspost, der kun vises for nogle af vรฆrdierne i filen. Sparse index hjรฆlper dig med at lรธse problemer med tรฆt indeksering i DBMSI denne teknik lagrer et interval af indekskolonner den samme datablokadresse, og nรฅr data skal hentes, hentes denne blokadresse.

Et sparse-indeks gemmer kun indeksposter for nogle sรธgenรธglevรฆrdier. Det krรฆver mindre plads og mindre vedligeholdelsesomkostninger til indsรฆttelser og sletninger, men det er langsommere end det kompakte indeks til at finde poster.

Nedenfor er et eksempel pรฅ et databaseindeks for et sparse-indeks.

Sparse indeks i DBMS

Tรฆt indeks vs. sparsomt indeks

De to primรฆre indeksvarianter udgรธr modsatte afvejninger, som er opsummeret nedenfor.

Aspect Tรฆt indeks Sparsomt indeks
Entries ร‰n pr. sรธgenรธgle En pr. blok
Space Mere Less
Sรธgehastighed Hurtigere Langsommere
Vedligeholdelse Hรธjere Sรฆnk

Sekundรฆrt indeks i DBMS

Det sekundรฆre indeks i DBMS kan genereres af et felt, der har en unik vรฆrdi for hver post, og det skal vรฆre en kandidatnรธgle. Det er ogsรฅ kendt som et ikke-klyngeindeks.

Denne indekseringsteknik pรฅ to niveauer til databaser bruges til at reducere kortetping stรธrrelsen pรฅ det fรธrste niveau. For det fรธrste niveau er der valgt et stort udvalg af tal, sรฅ kortetping stรธrrelsen forbliver altid lille.

Eksempel pรฅ sekundรฆrt indeks

Lad os forstรฅ sekundรฆr indeksering med et eksempel pรฅ en databaseindeksering. I en bankkontodatabase gemmes data sekventielt efter kontonummer, men du vil mรฅske gerne finde alle konti i en bestemt filial af ABC bank.

Her kan du have et sekundรฆrt indeks for hver sรธgenรธgle. Indeksposten peger pรฅ en bucket, der indeholder pointere til alle poster med den specifikke sรธgenรธglevรฆrdi.

Sekundรฆrt indeks i DBMS

ClusterIndeks i DBMS

I et klynget indeks gemmes selve posterne i indekset, ikke pointere. Nogle gange oprettes indekset pรฅ ikke-primรฆre nรธglekolonner, som muligvis ikke er unikke for hver post. I en sรฅdan situation kan du gruppere to eller flere kolonner for at fรฅ unikke vรฆrdier og oprette et indeks, som kaldes et klynget indeks. Dette hjรฆlper dig ogsรฅ med at identificere posten hurtigere.

Eksempel: Antag, at en virksomhed har ansat mange medarbejdere i forskellige afdelinger. I dette tilfรฆlde bรธr der oprettes et klyngeindeks for alle medarbejdere, der tilhรธrer den samme afdeling.

De betragtes som en enkelt klynge, og indekset peger pรฅ klyngen som helhed. Her er Department_no en ikke-unik nรธgle.

Hvad er et flerniveauindeks?

Flerniveauindeksering oprettes, nรฅr et primรฆrt indeks ikke passer i hukommelsen. Med denne type indekseringsmetode kan du reducere antallet af diskadgange for at nรฅ en post. Posterne opbevares pรฅ en disk som en sekventiel fil, og et sparse-indeks oprettes oven pรฅ den fil.

Flerniveauindeks i DBMS

B-Tree-indeks

B-trรฆindekset er den mest anvendte datastruktur til trรฆbaseret indeksering i DBMS. Det er et flerniveauformat til trรฆbaseret indeksering, der bruger balanceret binรฆre sรธgetrรฆerAlle bladnoder i B-trรฆet indeholder de faktiske datapointere.

Derudover er alle bladnoder sammenkoblet med en linket liste, hvilket gรธr det muligt for et B-trรฆ at understรธtte bรฅde tilfรฆldig og sekventiel adgang.

B-trรฆindeks i DBMS

  • Bladknuder skal have mellem 2 og 4 vรฆrdier.
  • Enhver sti fra roden til et blad er stort set lige lang.
  • Ikke-bladnoder, bortset fra rodnoden, har mellem 3 og 5 undernoder.
  • Enhver knude, der ikke er en rod eller et blad, har mellem n/2 og n bรธrn.

Hvor prรฆcise match-opslag dominerer, og omrรฅdescanninger er sjรฆldne, hashing kan vรฆre et hurtigere alternativ til et B-trรฆindeks.

Fordele ved indeksering

De vigtigste fordele ved indeksering er:

  • Det hjรฆlper med at reducere det samlede antal I/O-operationer, der er nรธdvendige for at hente data, sรฅ du ikke behรธver at fรฅ adgang til en rรฆkke direkte fra tabellen.
  • Det tilbyder hurtigere sรธgning og hentning af data for brugerne.
  • Det kan reducere tabelpladsen, fordi du ikke behรธver at gemme ROWID'en i indekset for hver linket rรฆkke.
  • Data i bladnoderne er allerede sorteret efter nรธglens vรฆrdi.

Ulemper ved indeksering

De vigtigste ulemper ved indeksering er:

  • For at udfรธre indeksering skal du bruge en primรฆrnรธgle i tabellen med en unik vรฆrdi.
  • Du kan ikke bygge et andet indeks pรฅ data, der allerede er indeksorganiseret pรฅ samme mรฅde.
  • Du har ikke tilladelse til at partitionere en indeksorganiseret tabel.
  • Indeksering forringer ydeevnen i INSERT-, DELETE- og UPDATE-forespรธrgsler.

Ofte Stillede Spรธrgsmรฅl

Et primรฆrt indeks er bygget pรฅ det felt, filen er sorteret efter, normalt den primรฆre nรธgle. Et sekundรฆrt indeks er bygget pรฅ et andet felt, sรฅ det skal bruge buckets for at nรฅ alle matchende poster.

Et B-trรฆ forbliver balanceret, sรฅ hvert opslag tager et tilsvarende lille antal disklรฆsninger, og dets linkede blade understรธtter rรฆkkeviddescanninger. Dette gรธr det stรฆrkt til bรฅde punkt- og rรฆkkeviddeforespรธrgsler.

Enhver indsรฆttelse, opdatering og sletning skal ogsรฅ vedligeholde hvert indeks. Flere indekser fremskynder lรฆsning, men tilfรธjer skriveoverhead og lagerplads, sรฅ de bรธr kun oprettes, hvor forespรธrgsler rent faktisk drager fordel af det.

AI-indeksrรฅdgivere studerer forespรธrgselsarbejdsbyrden og anbefaler indeks, der vil reducere omkostningerne mest muligt, samtidig med at de markerer eksisterende indeks, der aldrig bruges og kun tilfรธjer overhead.

Et klyngeindeks gemmer selve rรฆkkerne i indeksorden, sรฅ en tabel kan kun have รฉn. Et ikke-klyngeindeks indeholder pointere til rรฆkkerne, sรฅ en tabel kan have flere af dem.

Opsummer dette indlรฆg med: