Skalering af indekser med partitionering
Lær, hvordan indekser fungerer sammen med partitionerede tabeller, samt strategier til oprettelse af effektive lokale og globale indekser.
Skalering af indekser med partitionering er en gratis Avanceret PostgreSQL: Indeksering, partitionering og replikering-lektion på CoddyKit. Dette er lektion 1 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Avanceret PostgreSQL: Indeksering, partitionering og replikering, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Avanceret PostgreSQL: Indeksering, partitionering og replikering-kurset indeholder 4 lektioner i alt.
Samspillet mellem indekser og partitionering
Når du arbejder med virkelig massive datasæt i PostgreSQL, er det ikke bare en mulighed at kombinere indeksering og partitionering — det er ofte nødvendigt for at bevare ydeevnen.
Denne lektion undersøger, hvordan indekser interagerer med partitionerede tabeller, og hvilke strategier du kan bruge til at oprette indekser, der skalerer effektivt sammen med dine dataopdelinger.
Forstå lokale indekser
Et lokalt indeks er et indeks, der oprettes på en individuel partition i en partitioneret tabel. Når du opretter et indeks på den overordnede partitionerede tabel, opretter PostgreSQL automatisk et separat indeks for hver af dens partitioner.
- Hvert lokalt indeks dækker kun dataene i den pågældende partition.
- De administreres implicit, når du tilføjer eller fjerner partitioner.
- Dette er den mest almindelige og ofte mest effektive type indeks til partitionerede tabeller.
Oprettelse af lokale indekser
Det er enkelt at oprette et lokalt indeks. Du opretter blot indekset på den overordnede partitionerede tabel. PostgreSQL håndterer automatisk oprettelsen af individuelle indekser for hver underpartition.
Prøv at køre dette eksempel:
CREATE TABLE sensor_data (
id SERIAL,
log_time TIMESTAMPTZ NOT NULL,
value NUMERIC
) PARTITION BY RANGE (log_time);
CREATE TABLE sensor_data_y2023 PARTITION OF sensor_data
FOR VALUES FROM ('2023-01-01 00:00:00') TO ('2024-01-01 00:00:00');
-- This creates local indexes on all current and future partitions
CREATE INDEX idx_sensor_logtime ON sensor_data (log_time);Fordele ved lokale indekser
Lokale indekser er særligt effektive, når forespørgsler bruger partitioneringsnøglen. Her er hvorfor:
- Partitioneringsbeskæring: PostgreSQLs forespørgselsplanlægger kan hurtigt identificere og gennemgå kun de relevante partitioner baseret på forespørgslens `WHERE`-klausul.
- Mindre indekser: Hvert lokalt indeks er mindre og indeholder kun en delmængde af dataene, hvilket giver hurtigere opslag i en partition.
- Mindre I/O: Der skal læses færre data fra disken, hvilket forbedrer forespørgslens hastighed.
Forstå globale indekser
Et globalt indeks dækker i modsætning til et lokalt indeks alle partitioner i en partitioneret tabel. Det er ét samlet indeks, der fungerer meget ligesom et indeks på en almindelig, ikke-partitioneret tabel.
- Det er ikke knyttet til en bestemt partition.
- Opdateringer af enhver partition påvirker det ene globale indeks.
- De er mindre almindelige til generel optimering af forespørgsler på partitionerede tabeller.
Oprettelse af globale indekser
Hvis du vil oprette et globalt indeks, bruger du typisk nøgleordet ONLY, når du angiver den overordnede tabel. Det fortæller PostgreSQL, at indekset skal oprettes direkte på den overordnede tabel og ikke implicit på hver underordnet tabel.
Globale indekser bruges ofte til at håndhæve unikke begrænsninger på tværs af hele den partitionerede tabel for kolonner, der ikke er partitioneringsnøglen.
Prøv at køre dette eksempel:
-- Assuming sensor_data is already partitioned
-- Create a unique global index across all partitions
CREATE UNIQUE INDEX idx_sensor_id_global ON ONLY sensor_data (id);Overvejelser om globale indekser
Globale indekser kan være nyttige, men de medfører nogle afvejninger:
- Vedligeholdelsesomkostninger: Indsættelser, opdateringer eller sletninger i enhver partition kræver opdateringer af det ene globale indeks, hvilket kan være langsommere.
- Ingen fordel ved partitioneringsbeskæring: Forespørgsler, der bruger et globalt indeks, får ikke fordel af partitioneringsbeskæring på selve indekset, fordi det dækker alle data.
- Anvendelsesområder: Bedst til unikke begrænsninger på kolonner, der ikke er partitioneringsnøglen, eller til forespørgsler, der ofte tilgår kolonner, som ikke er partitioneringsnøglen, på tværs af hele datasættet.
Lokale eller globale: Hvornår?
Valget mellem lokale og globale indekser afhænger af din arbejdsbelastning:
- Lokale indekser: Ideelle, når forespørgsler ofte filtrerer data ved hjælp af partitioneringsnøglen (f.eks. datointervaller eller bestemte kategorier). De udnytter partitioneringsbeskæring til at øge hastigheden.
- Globale indekser: Overvej dem til håndhævelse af unikke begrænsninger på kolonner, der ikke er partitioneringsnøglen, eller til forespørgsler, der ofte tilgår kolonner, som ikke er partitioneringsnøglen, på tværs af hele tabellen.
Lokale indekser er som regel det foretrukne valg for ydeevnen på partitionerede tabeller.
Praktisk scenarieeksempel
Forestil dig en orders-tabel, der er partitioneret efter order_date.
- Et lokalt indeks på
order_datevil være meget effektivt til forespørgsler somWHERE order_date BETWEEN X AND Ypå grund af partitioneringsbeskæring. - Et globalt indeks på
customer_idvil være effektivt tilWHERE customer_id = Zpå tværs af alle ordrer, især hvis du skal finde alle ordrer for en kunde uanset dato.
Det afgørende er at tilpasse din indeksstrategi til dine mest almindelige forespørgselsmønstre.
Indeksering af partitionerede tabeller
Overvej en stor sales-tabel, der er partitioneret efter sale_date. Hvilken indekstype er generelt mest effektiv til forespørgsler som SELECT * FROM sales WHERE sale_date BETWEEN '2023-01-01' AND '2023-01-31' AND product_id = 123;?
Opsummering af indeksering i stor skala
I denne lektion har du undersøgt, hvordan indeks interagerer med partitionerede tabeller. Du har lært om:
- Lokale indeks: Oprettes pr. partition og er ideelle til forespørgsler, der bruger partitionsnøglen, fordi de drager fordel af partitionsbeskæring.
- Globale indeks: Dækker alle partitioner og er nyttige til entydighedskrav eller forespørgsler på kolonner, der ikke er partitionsnøgler, på tværs af hele tabellen, men de kræver mere vedligeholdelse.
At mestre samspillet mellem partitionering og indeksering er afgørende for at opnå høj ydeevne i store PostgreSQL-databaser.
Lær Avanceret PostgreSQL: Indeksering, partitionering og replikering med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 11
- Lektioner
- 44
Ofte stillede spørgsmål
Er lektionen “Skalering af indekser med partitionering” gratis?
Ja — hele teksten til “Skalering af indekser med partitionering” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Avanceret PostgreSQL: Indeksering, partitionering og replikering-kurset, skal du opgradere til CoddyKit PRO. Avanceret PostgreSQL: Indeksering, partitionering og replikering-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Skalering af indekser med partitionering”?
Lær, hvordan indekser fungerer sammen med partitionerede tabeller, samt strategier til oprettelse af effektive lokale og globale indekser. Du øver dig i Avanceret PostgreSQL: Indeksering, partitionering og replikering med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Avanceret PostgreSQL: Indeksering, partitionering og replikering?
Der kræves ingen tidligere erfaring. Avanceret PostgreSQL: Indeksering, partitionering og replikering på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 1 af 4.
Hvor lang tid tager lektionen “Skalering af indekser med partitionering”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Avanceret PostgreSQL: Indeksering, partitionering og replikering-lektion?
Ja. Alle Avanceret PostgreSQL: Indeksering, partitionering og replikering-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Skalering af indekser med partitionering
- Valg af indeks- og partitioneringsstrategier
- Praktiske casestudier
- BRIN-indekser til store partitionerede tabeller