0Pricing
SQL Academy · Pelajaran

Membuat Kueri Lintas Partisi secara Efisien

Tulis kueri yang memanfaatkan pruning partisi, lalu verifikasi pruning dengan EXPLAIN

Membuat Kueri Lintas Partisi secara Efisien adalah pelajaran SQL Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar SQL Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus SQL Academy mencakup 4 pelajaran total.

Memfilter berdasarkan Kunci Partisi

Pemangkasan hanya berfungsi jika klausa WHERE menyertakan kunci partisi:

-- 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;

Pemangkasan Komposit

Perencana dapat memangkas berdasarkan beberapa kunci pada tabel yang dipartisi bertingkat:

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 Menampilkan Pemangkasan

Periksa rencana untuk memastikan pemangkasan benar-benar terjadi:

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.

Pengecualian Batasan vs Pemangkasan Partisi

PG modern secara bawaan menggunakan "pemangkasan partisi" yang cepat. "Pengecualian batasan" yang lebih lama lebih lambat; pastikan enable_partition_pruning = on.

Pemangkasan Saat Eksekusi

Bahkan dengan kueri berparameter (PREPARE), PG dapat melakukan pemangkasan saat eksekusi:

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.

Indeks Lintas Partisi

Indeks diteruskan ke partisi. Kueri pada kolom yang diindeks berfungsi di seluruh partisi—tetapi perencana memindai indeks setiap partisi.

Agregat Lintas Partisi

GROUP BY pada kunci partisi memberikan manfaat terbesar. GROUP BY pada kolom lain akan memindai setiap partisi.

Eksekusi Paralel per Partisi

PostgreSQL dapat menjalankan pemindaian di seluruh partisi secara paralel (PG 11+):

SET max_parallel_workers_per_gather = 4;
EXPLAIN SELECT COUNT(*) FROM events;
-- Parallel Append over partitions.

Gabungan Antar-Tabel yang Dipartisi

Jika kedua tabel yang dipartisi menggunakan kunci partisi yang sama, "gabungan per partisi" lebih cepat—setiap partisi digabungkan secara terpisah:

SET enable_partitionwise_join = on;
-- Now PG can join events to event_metrics partition-by-partition.

Menghindari Kesalahan Umum

  • Jangan menerapkan fungsi pada kunci partisi dalam WHERE—ini menghentikan pemangkasan
  • Jangan lupa menyertakan kunci partisi dalam kueri Anda
  • Jangan membagi tabel menjadi ribuan partisi kecil—beban perencanaan akan mendominasi

Jumlah Partisi yang Wajar

Targetkan puluhan hingga ratusan partisi, bukan ribuan. Setiap partisi menambah beban saat perencanaan. Untuk kebutuhan yang sangat terperinci, gunakan subpartisi.

Pemeliharaan per Partisi

VACUUM, ANALYZE, dan REINDEX dijalankan per partisi—dan dapat dijalankan secara paralel. Manfaatnya semakin besar seiring bertambahnya jumlah partisi, selama tetap dalam batas wajar.

Rangkuman

Pemartisian memberikan manfaat terbesar pada kueri yang memfilter berdasarkan kunci partisi.

  • WHERE pada kunci partisi → pemangkasan
  • Konfirmasikan dengan EXPLAIN
  • Aktifkan gabungan per partisi untuk gabungan yang kuncinya sesuai
  • Jangan membuat terlalu banyak partisi

Pemeriksaan Singkat

Anda memiliki events yang dipartisi berdasarkan bulan menggunakan ts. Kueri mana yang memperoleh manfaat dari pemangkasan partisi?

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Membuat Kueri Lintas Partisi secara Efisien” gratis?

Ya — teks lengkap “Membuat Kueri Lintas Partisi secara Efisien” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus SQL Academy, upgrade ke CoddyKit PRO. Kursus SQL Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Membuat Kueri Lintas Partisi secara Efisien”?

Tulis kueri yang memanfaatkan pruning partisi, lalu verifikasi pruning dengan EXPLAIN Kamu berlatih SQL Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai SQL Academy?

Tidak diperlukan pengalaman sebelumnya. SQL Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.

Berapa lama pelajaran “Membuat Kueri Lintas Partisi secara Efisien” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran SQL Academy ini?

Ya. Setiap pelajaran SQL Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Mengapa Melakukan Partisi: Pruning, Pemeliharaan
  2. Partisi Rentang, Daftar, dan Hash
  3. Melepas dan Memasang Partisi
  4. Membuat Kueri Lintas Partisi secara Efisien
← Kembali ke SQL Academy