PolarDB for PostgreSQL (Kompatibel dengan Oracle) mendukung pemangkasan partisi. Optimizer secara otomatis mengekstrak partisi yang perlu dipindai dari klausa FROM dan WHERE berdasarkan kunci partisi, mencegah pemindaian tabel penuh dan mengurangi jumlah blok data yang harus dipindai, sehingga meningkatkan kinerja kueri.
Mekanisme pemangkasan partisi menggunakan dua teknik berikut:
Pengecualian kendala
Pemangkasan cepat
Pengecualian kendala
Parameter constraint_exclusion digunakan untuk mengontrol pengecualian kendala. Nilai validnya adalah on, off, dan partition, dengan nilai default partition. Untuk mengaktifkan pengecualian kendala, atur parameter constraint_exclusion ke partition atau on. Untuk menonaktifkannya, atur parameter tersebut ke off.
Jika pengecualian kendala diaktifkan, server memeriksa kendala yang didefinisikan untuk setiap partisi guna menentukan apakah partisi tersebut dapat memenuhi kueri.
Saat menjalankan pernyataan SELECT tanpa klausa WHERE, perencana kueri merekomendasikan rencana eksekusi yang mencakup seluruh tabel.
Saat menjalankan pernyataan SELECT dengan klausa WHERE, perencana kueri menentukan partisi yang relevan untuk menyimpan rekaman dan mengirim fragmen kueri ke partisi tersebut, mengecualikan partisi yang tidak relevan dari rencana eksekusi.
Jika Anda tidak menggunakan tabel terpartisi, disarankan untuk menonaktifkan pengecualian kendala guna meningkatkan kinerja.
Pemangkasan cepat
Teknik pemangkasan cepat hanya dapat mengoptimalkan pernyataan kueri jika pernyataan tersebut mengandung klausa WHERE dan kualifikasi dalam klausa WHERE sesuai format tertentu. Batasan ini sama dengan batasan pada teknik pengecualian kendala.
Parameter polar_comp_enable_pruning digunakan untuk mengontrol pemangkasan cepat. Nilai validnya adalah on dan off, dengan nilai default on. Jika parameter polar_comp_enable_pruning disetel ke on, pemangkasan cepat diaktifkan untuk memangkas kueri tertentu dengan cepat. Jika disetel ke off, pemangkasan cepat dinonaktifkan.
Pemangkasan cepat tidak dapat mengoptimalkan kueri pada tabel subpartisi atau kueri pada tabel terpartisi rentang yang dipartisi pada beberapa kolom.
Berikut ini menjelaskan cara menggunakan pemangkasan cepat:
Untuk kueri pada tabel terpartisi daftar, PolarDB for PostgreSQL (Kompatibel dengan Oracle) dapat memangkas kueri dengan cepat yang mengandung klausa WHERE. Operator yang dapat digunakan dalam klausa WHERE meliputi tanda sama dengan (=), IS NULL, dan IS NOT NULL.
Kode berikut memberikan contoh:
Buat tabel terpartisi daftar.
CREATE TABLE sales_hist(..., country text, ...) PARTITION BY LIST(country) ( PARTITION americas VALUES('US', 'CA', 'MX'), PARTITION europe VALUES('BE', 'NL', 'FR'), PARTITION asia VALUES('JP', 'PK', 'CN'), PARTITION others VALUES(DEFAULT) )Gunakan pemangkasan cepat untuk mengekstrak partisi yang memenuhi masing-masing klausa WHERE berikut dari tabel terpartisi daftar.
WHERE country = 'US' WHERE country IS NULL;Jika klausa WHERE pertama digunakan, pemangkasan cepat mengecualikan partisi europe, asia, dan others karena partisi-partisi tersebut tidak memenuhi
WHERE country = 'US'.Jika klausa WHERE kedua digunakan, pemangkasan cepat mengecualikan partisi americas, europe, dan asia karena partisi-partisi tersebut tidak memenuhi
WHERE country IS NULL.
Untuk tabel terpartisi rentang, PolarDB for PostgreSQL (Kompatibel dengan Oracle) dapat memangkas kueri dengan cepat yang mengandung klausa WHERE. Operator yang dapat digunakan dalam klausa WHERE meliputi tanda sama dengan (=), tanda lebih besar (>), tanda lebih besar atau sama dengan (>=), tanda kurang dari (<), tanda kurang dari atau sama dengan (<=), IS NULL, dan IS NOT NULL. Klausa WHERE juga dapat mengandung ekspresi kompleks yang menggunakan operator AND atau BETWEEN.
WHERE size > 100 AND size <= 200 WHERE size BETWEEN 100 AND 200CatatanPemangkasan cepat tidak dapat dilakukan berdasarkan ekspresi yang mengandung operator OR atau IN.
Kode berikut memberikan contoh:
Buat tabel terpartisi rentang.
CREATE TABLE boxes(id int, size int, color text) PARTITION BY RANGE(size) ( PARTITION small VALUES LESS THAN(100), PARTITION medium VALUES LESS THAN(200), PARTITION large VALUES LESS THAN(300) )Gunakan pemangkasan cepat untuk mengekstrak partisi yang memenuhi masing-masing klausa WHERE berikut dari tabel terpartisi rentang.
WHERE size > 100-- Memindai partisi medium dan partisi large WHERE size >= 100-- Memindai partisi medium dan partisi large WHERE size =100-- Memindai partisi medium WHERE size <= 100-- Memindai partisi small dan partisi medium WHERE size < 100-- Memindai partisi small WHERE size > 100 AND size < 199-- Memindai partisi medium WHERE size BETWEEN 100 AND 199-- Memindai partisi medium WHERE color = 'red' AND size = 100 -- Memindai partisi medium WHERE color = 'red' AND (size > 100 AND size < 199) -- Memindai partisi medium