Wydajne wykonywanie zapytań obejmujących partycje
Pisać zapytania korzystające z przycinania partycji i weryfikować to przycinanie za pomocą EXPLAIN
Wydajne wykonywanie zapytań obejmujących partycje to bezpłatna lekcja SQL Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej SQL Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs SQL Academy zawiera 4 lekcji w sumie.
Filtrowanie po kluczu partycjonowania
Przycinanie partycji działa tylko wtedy, gdy klauzula WHERE zawiera klucz partycjonowania:
-- Prunes (uses date partitioning):
SELECT * FROM events WHERE ts >= '2024-03-01' AND ts < '2024-04-01';
-- No pruning — scans all partitions:
SELECT * FROM events WHERE user_id = 42;Przycinanie złożone
W tabelach partycjonowanych wielopoziomowo planista może przycinać partycje na podstawie wielu kluczy:
SELECT * FROM events
WHERE ts >= '2024-03-01' AND ts < '2024-04-01'
AND user_id = 42;
-- Prunes by date AND by hash partition.EXPLAIN pokazuje przycinanie partycji
Sprawdź plan, aby potwierdzić, że przycinanie partycji rzeczywiście zachodzi:
EXPLAIN SELECT * FROM events WHERE ts >= '2024-03-01' AND ts < '2024-04-01';
-- Append
-- -> Seq Scan on events_2024_q1
-- Only Q1 partition shown; others pruned.Wykluczanie ograniczeń a przycinanie partycji
Współczesny PG domyślnie korzysta z szybkiego „partition pruning”. Starsze „constraint exclusion” było wolniejsze; upewnij się, że enable_partition_pruning = on.
Przycinanie w czasie wykonywania
Nawet w przypadku zapytań parametryzowanych (PREPARE) PG może przycinać partycje w czasie wykonywania:
PREPARE p(timestamptz, timestamptz) AS
SELECT * FROM events WHERE ts >= $1 AND ts < $2;
EXECUTE p('2024-03-01', '2024-04-01');
-- Pruning happens at execute, not at parse.Indeksy między partycjami
Indeksy są propagowane do partycji. Zapytanie dotyczące indeksowanej kolumny działa na wszystkich partycjach, ale planista skanuje indeks każdej z nich.
Agregacje między partycjami
Najwięcej korzyści daje GROUP BY na kluczu partycjonowania. GROUP BY na innych kolumnach skanuje każdą partycję.
Równoległe wykonywanie dla poszczególnych partycji
PostgreSQL może wykonywać skanowanie partycji równolegle (PG 11+):
SET max_parallel_workers_per_gather = 4;
EXPLAIN SELECT COUNT(*) FROM events;
-- Parallel Append over partitions.Złączenia między tabelami partycjonowanymi
Jeśli obie tabele partycjonowane korzystają ze wspólnego klucza partycjonowania, „partition-wise join” jest szybsze — każda partycja jest złączana niezależnie:
SET enable_partitionwise_join = on;
-- Now PG can join events to event_metrics partition-by-partition.Unikanie typowych błędów
- Nie stosuj funkcji do klucza partycjonowania w WHERE — uniemożliwia to przycinanie partycji
- Nie zapominaj o kluczu partycjonowania w zapytaniach
- Nie dziel tabeli na tysiące małych partycji — narzut planowania zacznie dominować
Rozsądna liczba partycji
Celuj w dziesiątki lub niewielkie setki partycji, a nie w tysiące. Każda partycja zwiększa narzut planowania. Jeśli potrzebujesz bardzo szczegółowego podziału, zastosuj podpartycjonowanie.
Konserwacja poszczególnych partycji
VACUUM, ANALYZE i REINDEX są wykonywane dla każdej partycji i mogą działać równolegle. Korzyść rośnie wraz z liczbą partycji, oczywiście w rozsądnych granicach.
Podsumowanie
Partycjonowanie najbardziej sprzyja zapytaniom filtrującym po kluczu partycjonowania.
- WHERE na kluczu partycjonowania → przycinanie partycji
- Potwierdzaj działanie za pomocą EXPLAIN
- Włącz partition-wise join dla złączeń z pasującymi kluczami
- Nie stosuj nadmiernego partycjonowania
Szybkie sprawdzenie
Ma Pan/Pani tabelę events partycjonowaną miesięcznie według ts. Które zapytanie skorzysta z przycinania partycji?
Często zadawane pytania
Czy lekcja „Wydajne wykonywanie zapytań obejmujących partycje” jest bezpłatna?
Tak — pełny tekst „Wydajne wykonywanie zapytań obejmujących partycje” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu SQL Academy, przejdź na CoddyKit PRO. Kurs SQL Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Wydajne wykonywanie zapytań obejmujących partycje”?
Pisać zapytania korzystające z przycinania partycji i weryfikować to przycinanie za pomocą EXPLAIN Ćwiczysz SQL Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć SQL Academy?
Nie wymagamy żadnego doświadczenia. SQL Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.
Ile czasu zajmuje lekcja „Wydajne wykonywanie zapytań obejmujących partycje”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji SQL Academy?
Tak. Każda lekcja SQL Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Dlaczego partycjonować: przycinanie i konserwacja
- Partycjonowanie zakresowe, listowe i haszujące
- Odłączanie i dołączanie partycji
- Wydajne wykonywanie zapytań obejmujących partycje