PostgreSQL

Sådan oprettes indekser i PostgreSQL

Sådan oprettes indekser i PostgreSQL

Indeks er specialiserede søgetabeller, der bruges af databankjagtmotorer til at fremskynde forespørgselsresultater. Et indeks er en henvisning til oplysningerne i en tabel. Hvis navnene i en kontaktbog for eksempel ikke er alfabetiserede, skal du gå ned hver række og søge gennem hvert navn, inden du når det specifikke telefonnummer, som du søger efter. Et indeks fremskynder SELECT-kommandoerne og WHERE-sætningerne og udfører dataindtastning i UPDATE- og INSERT-kommandoerne. Uanset om indekser indsættes eller slettes, er der ingen indflydelse på informationen i tabellen. Indekser kan være specielle på samme måde, som UNIQUE-begrænsningen hjælper med at undgå replika-poster i det felt eller det sæt felter, som indekset findes for.

Generel syntaks

Følgende generelle syntaks bruges til at oprette indekser.

>> CREATE INDEX index_name ON table_name (column_name);

For at begynde at arbejde på indekser skal du åbne pgAdmin af Postgresql fra applikationslinjen. Du finder indstillingen 'Servere' vist nedenfor. Højreklik på denne indstilling og tilslut den til databasen.

Som du kan se, er databasen 'Test' angivet i indstillingen 'Databaser'. Hvis du ikke har en, skal du højreklikke på 'Databaser', navigere til indstillingen 'Opret' og navngive databasen efter dine præferencer.

Udvid 'Skemaer', og du finder muligheden 'Tabeller', der er angivet der. Hvis du ikke har en, skal du højreklikke på den, navigere til 'Opret' og klikke på 'Tabel' for at oprette en ny tabel. Da vi allerede har oprettet tabellen 'emp', kan du se den på listen.

Prøv SELECT-forespørgslen i Forespørgselseditor for at hente posterne i 'emp' -tabellen som vist nedenfor.

>> VÆLG * FRA offentligheden.emp ORDRE MED "id" ASC;

Følgende data vil være i 'emp' -tabellen.

Opret enkeltkolonneindekser

Udvid 'emp' tabellen for at finde forskellige kategorier, f.eks.g., Kolonner, begrænsninger, indekser osv. Højreklik på 'Indekser', naviger til indstillingen 'Opret' og klik på 'Indeks' for at oprette et nyt indeks.

Konstruer et indeks til den givne 'emp' -tabel eller den udstillede skærm ved hjælp af dialogboksen Indeks. Her er der to faner: 'Generelt' & 'Definition.'I fanen' Generelt 'skal du indsætte en bestemt titel for det nye indeks i feltet' Navn '. Vælg 'tablespace', hvorunder det nye indeks vil blive gemt ved hjælp af rullelisten ud for 'Tablespace.'Som i området' Kommentar ', lav indekskommentarer her. For at starte denne proces skal du navigere til fanen 'Definition'.

Her skal du angive 'Adgangsmetode' ved at vælge indekstypen. Derefter er der flere andre muligheder for at oprette dit indeks som 'Unikt'. I området 'Kolonner' skal du trykke på '+' tegnet og tilføje kolonnenavnene, der skal bruges til indeksering. Som du kan se, har vi kun anvendt indeksering i kolonnen 'Telefon'. Vælg SQL-sektionen for at begynde.

Fanen SQL viser SQL-kommandoen, der er oprettet af dine input i hele indeksdialogen. Klik på knappen 'Gem' for at oprette indekset.

Gå igen til indstillingen 'Tabeller' og naviger til 'emp' -tabellen. Opdater 'Indekser', og du finder det nyoprettede 'index_on_phone' indeks, der er angivet i det.

Nu udfører vi kommandoen EXPLAIN SELECT for at kontrollere resultaterne for indekserne med WHERE-klausulen. Dette vil resultere i følgende output, der siger 'Seq Scan on emp.'Du undrer dig måske over, hvorfor dette skete, mens du bruger indekser.

Årsag: Postgres-planlæggeren kan beslutte ikke at have et indeks af forskellige årsager. Strategen tager de bedste beslutninger det meste af tiden, selvom årsagerne ikke altid er klare. Det er fint, hvis der bruges en indekssøgning i nogle forespørgsler, men ikke i alle. De poster, der returneres fra begge tabeller, kan variere afhængigt af de faste værdier, som forespørgslen returnerer. Fordi dette sker, er en sekvensscanning næsten altid hurtigere end en indeksscanning, hvilket indikerer, at forespørgselsplanlæggeren måske havde ret i at bestemme, at omkostningerne ved at køre forespørgslen på denne måde reduceres.

Opret flere kolonneindekser

For at oprette indekser med flere kolonner skal du åbne kommandolinjeskallen og overveje følgende tabel 'elev' for at begynde at arbejde på indekser med flere kolonner.

>> VÆLG * FRA studerende;

Skriv følgende CREATE INDEX-forespørgsel i den. Denne forespørgsel opretter et indeks med navnet 'new_index' i kolonnerne 'sname' og 'age' i tabellen 'student'.

>> CREATE INDEX new_index ON Student (sname, age);

Nu viser vi egenskaberne og attributterne for det nyoprettede 'new_index' indeks ved hjælp af kommandoen '\ d'. Som du kan se på billedet, er dette et btree-type indeks, der blev anvendt i kolonnerne 'sname' og 'age'.

>> \ d new_index;

Opret UNIKT indeks

For at konstruere et unikt indeks, antag følgende 'emp' tabel.

>> VÆLG * FRA emp;

Udfør CREATE UNIQUE INDEX-forespørgslen i skallen efterfulgt af indeksnavnet 'empind' i kolonnen 'navn' i 'emp' -tabellen. I output kan du se, at det unikke indeks ikke kan anvendes på en kolonne med duplikerede 'navn'-værdier.

>> OPRET unik INDEX empind ON emp (navn);

Sørg for kun at anvende det unikke indeks på kolonner, der ikke indeholder dubletter. For 'emp' -tabellen kan du antage, at kun kolonnen 'id' indeholder unikke værdier. Så vi anvender et unikt indeks på det.

>> OPRET unik INDEX empIN ON emp (id);

Følgende er attributterne for det unikke indeks.

>> \ d empid;

Drop Index

DROP-sætningen bruges til at fjerne et indeks fra en tabel.

>> DROP INDEX empind;

Konklusion

Mens indekser er designet til at forbedre databases effektivitet, er det i nogle tilfælde ikke muligt at bruge et indeks. Når du bruger et indeks, skal følgende regler overvejes:

SuperTuxKart til Linux
SuperTuxKart er en fantastisk titel designet til at give dig Mario Kart-oplevelsen gratis på dit Linux-system. Det er ret udfordrende og sjovt at spil...
Kæmp om Wesnoth-vejledning
Slaget om Wesnoth er et af de mest populære open source-strategispil, som du kan spille på dette tidspunkt. Ikke kun har dette spil været under udvikl...
0 A.D. Vejledning
Ud af de mange strategispil derude, 0 A.D. formår at skille sig ud som en omfattende titel og et meget dybt, taktisk spil på trods af at det er open s...