SQL Academy · Oppitunti

Miksi osioida: karsinta ja ylläpito

Ymmärrä osioinnin hyödyt: kyselyiden osioiden karsinta, nopeampi VACUUM ja helpompi arkistointi.

Oppitunti 1/414 vaihetta

Miksi osioida: karsinta ja ylläpito on ilmainen SQL Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu SQL Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. SQL Academy-kurssilla on yhteensä 4 oppituntia.

Mitä partitiointi on?

Yhden loogisen taulun jakaminen useiksi fyysisiksi tauluiksi (partitioiksi), joista kukin sisältää osan riveistä. Kyselyt käyvät läpi vain olennaiset partitiot.

Miksi partitioida?

Suuret taulut aiheuttavat ongelmia:

  • Indeksit kasvavat valtaviksi ja haut hidastuvat
  • VACUUM kestää tunteja
  • Varmuuskopiot ovat hitaita
  • Jotkin kyselyt käyvät tarpeettomasti läpi tietoja

Partitiointi ratkaisee kaikki nämä neljä ongelmaa.

Partitioiden karsinta

Kyselysuunnittelija voi OHITTAA partitiot, jotka eivät voi vastata WHERE-ehtoa:

EXPLAIN SELECT * FROM events
WHERE ts >= '2024-03-01' AND ts < '2024-04-01';
-- Only March partition scanned; older partitions skipped.
-- Plan rows: 1M, not 100B.

Milloin partitioida

Partitioikaa, kun:

  • Taulun koko on vähintään noin 100 Gt
  • Käytettävissä on luonteva partitioavain (päivämäärä, tenant tai alue)
  • Useimmat kyselyt suodattavat tällä avaimella
  • Vanhat tiedot voidaan arkistoida tai poistaa

Milloin EI pidä partitioida

Älkää partitoiko vain siksi, että se kuulostaa hienolta:

  • Alle muutaman gigatavun taulut eivät hyödy siitä
  • Jos kyselyt eivät suodata partitioavaimella, karsintaa EI tapahdu
  • Se lisää ylläpidon monimutkaisuutta (partitioiden hallinta)

Partitiointistrategiat

PostgreSQL tukee kolmea strategiaa:

  • Range — partitiot kattavat arvoalueita (päivämäärät, tunnisteet)
  • List — partitiot sisältävät tiettyjä arvoja (maat, tenantit)
  • Hash — modulohajautus tasaista jakautumista varten

Edullinen poisto

Partitio poistetaan heti — rivejä ei tarvitse poistaa yksitellen:

DROP TABLE events_2023;
-- 100GB gone in milliseconds, no VACUUM aftermath.

Helpompi ylläpito

VACUUM, REINDEX ja ANALYZE toimivat partitioittain. Ylläpitoikkunat voidaan sovittaa partitiotaulujen väliin yhden valtavan erän sijaan.

Pienemmät indeksit partitioittain

Jokaisella partitiolla on omat indeksinsä. 1 Gt:n partitiolla oleva B-tree sisältää vähemmän tasoja kuin 1 Tt:n taululla oleva indeksi, joten haut ovat nopeampia.

Partitiointi on työkalu, ei ihmeratkaisu

Partitiointi ei tuo ilmaista suorituskykyä — se tarjoaa karsinnan kyselyille, jotka suodattavat partitioavaimella, sekä helpottaa ylläpitoa. Jos nämä hyödyt eivät päde, lisäätte vain monimutkaisuutta.

PostgreSQL:n natiivi (deklaratiivinen) partitiointi

Saatavilla PG 10:stä lähtien. Jokainen partitio on oikea taulu:

CREATE TABLE events (
  id BIGSERIAL,
  ts TIMESTAMPTZ NOT NULL,
  user_id BIGINT,
  data JSONB
) PARTITION BY RANGE (ts);

CREATE TABLE events_2024_01 PARTITION OF events
  FOR VALUES FROM ('2024-01-01') TO ('2024-02-01');

Ennen PG10:tä: periytymiseen perustuva partitiointi

Vanhat järjestelmät käyttävät taulujen periytymistä ja triggereitä. Välttäkää tätä uudessa koodissa — deklaratiivinen partitiointi on yksinkertaisempaa ja nopeampaa.

Yhteenveto

Partitiointi toimii erinomaisesti suurissa, aikaperusteisesti tai tenanttien mukaan jaetuissa tauluissa.

  • Karsinta ohittaa tarpeettomat partitiot
  • Partitioittainen ylläpito on nopeampaa
  • DROP TABLE korvaa 100 Gt:n DELETE-operaation
  • Se ei ole ihmeratkaisu — siitä on hyötyä vain, jos kyselyt vastaavat partitioavainta

Pikatarkistus

Partitioitte taulun kuukausittain ja suoritatte kyselyn SELECT * FROM events WHERE country = 'US' ilman päivämääräsuodatinta. Auttaako partitiointi?

Aloita maksutta

Opi SQL tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
46
Oppitunnit
183

Usein kysytyt kysymykset

Onko oppitunti ”Miksi osioida: karsinta ja ylläpito” ilmainen?

Kyllä – oppitunnin ”Miksi osioida: karsinta ja ylläpito” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko SQL Academy-kurssin, päivitä CoddyKit PROhon. SQL Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Miksi osioida: karsinta ja ylläpito”?

Ymmärrä osioinnin hyödyt: kyselyiden osioiden karsinta, nopeampi VACUUM ja helpompi arkistointi. Harjoittelet SQL Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni SQL Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin SQL Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/4.

Kuinka kauan ”Miksi osioida: karsinta ja ylläpito”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä SQL Academy-oppitunnilla?

Kyllä. Jokainen SQL Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Miksi osioida: karsinta ja ylläpito
  2. Väli-, lista- ja hash-osiointi
  3. Osioiden irrottaminen ja liittäminen
  4. Kyselyt useista osioista tehokkaasti
← Takaisin: SQL Academy