All Products
Search
Document Center

AnalyticDB:Cara menggunakan partisi tabel?

Last Updated:Mar 28, 2026

Partisi tabel membagi tabel besar menjadi segmen-segmen yang lebih kecil dan dikelola secara independen berdasarkan nilai kolom tertentu. Untuk tabel fakta atau tabel besar, partisi mempercepat penghapusan dan pemuatan data karena Anda dapat mengoperasikan seluruh partisi sekaligus, bukan memindai baris satu per satu.

  • Hapus semua data dalam suatu partisi dengan ALTER TABLE DROP PARTITION—jauh lebih cepat daripada menghapus baris satu per satu.

  • Muat batch data baru melalui pertukaran partisi dengan ALTER TABLE EXCHANGE PARTITION, sehingga menghindari penulisan ke seluruh tabel.

Kapan menggunakan partisi tabel

Sebelum melakukan partisi pada tabel, pastikan hal-hal berikut:

  • Tabel tersebut besar. Tabel dengan jutaan atau miliaran baris merupakan kandidat ideal. Untuk tabel yang hanya memiliki beberapa ribu baris, overhead administratif biasanya lebih besar daripada keuntungan performanya.

  • Kueri melakukan filter berdasarkan kolom tertentu. Partisi efektif ketika klausa WHERE secara konsisten merujuk kunci partisi, sehingga perencana kueri dapat melewati partisi yang tidak relevan.

  • Anda mengelola data berdasarkan waktu atau kategori. Operasi rutin seperti membersihkan data bulan lalu atau memuat batch harian secara alami sesuai dengan batas partisi.

Jika sebagian besar kueri melakukan pemindaian penuh terhadap tabel tanpa memfilter berdasarkan kunci partisi, partisi justru menambahkan overhead tanpa meningkatkan performa.

Jenis partisi

AnalyticDB for PostgreSQL mendukung tiga jenis partisi:

TypeWhen to use
Range partitioningPartisi berdasarkan rentang nilai numerik atau tanggal yang kontinu — misalnya, satu partisi per bulan untuk data time-series.
List partitioningPartisi berdasarkan daftar eksplisit nilai diskrit — misalnya, satu partisi per Wilayah penjualan atau kategori produk.
Composite partitionGabungkan strategi range dan list untuk data multidimensi — misalnya, partisi pertama berdasarkan tahun, lalu berdasarkan Wilayah di dalam setiap tahun.
Range partitioning hanya mendukung tipe kolom numerik dan tanggal/waktu.

Buat tabel partisi

Contoh berikut membuat tabel LINEITEM yang dipartisi berdasarkan tanggal pengiriman. Setiap partisi mencakup satu bulan kalender dari Januari 1992 hingga Januari 2000.

CREATE TABLE LINEITEM (
    L_ORDERKEY      BIGINT NOT NULL,
    L_PARTKEY       BIGINT NOT NULL,
    L_SUPPKEY       BIGINT NOT NULL,
    L_LINENUMBER    INTEGER,
    L_QUANTITY      FLOAT8,
    L_EXTENDEDPRICE FLOAT8,
    L_DISCOUNT      FLOAT8,
    L_TAX           FLOAT8,
    L_RETURNFLAG    CHAR(1),
    L_LINESTATUS    CHAR(1),
    L_SHIPDATE      DATE,
    L_COMMITDATE    DATE,
    L_RECEIPTDATE   DATE,
    L_SHIPINSTRUCT  CHAR(25),
    L_SHIPMODE      CHAR(10),
    L_COMMENT       VARCHAR(44)
) WITH (APPENDONLY=true, ORIENTATION=column, COMPRESSTYPE=zlib, COMPRESSLEVEL=5, BLOCKSIZE=1048576, OIDS=false)
DISTRIBUTED BY (l_orderkey)
PARTITION BY RANGE (L_SHIPDATE)
    (START (date '1992-01-01') INCLUSIVE END (date '2000-01-01') EXCLUSIVE EVERY (INTERVAL '1 month'));

Parameter utama dalam contoh ini:

ParameterValueDescription
ORIENTATIONcolumnPenyimpanan berorientasi kolom, dioptimalkan untuk kueri analitis
COMPRESSTYPEzlibKompresi zlib untuk mengurangi jejak penyimpanan
COMPRESSLEVEL5Tingkat kompresi (1–9; semakin tinggi = ukuran lebih kecil, penulisan lebih lambat)
BLOCKSIZE1048576Ukuran blok dalam byte (1 MB)
DISTRIBUTED BYl_orderkeyKunci distribusi untuk menyebarkan data ke seluruh segmen
PARTITION BY RANGEL_SHIPDATEKolom partisi — harus bertipe numerik atau tanggal/waktu

Merawat partisi

Hapus partisi lama

Untuk menghapus semua data dalam suatu partisi, hapus langsung partisinya. Ini jauh lebih cepat daripada pernyataan DELETE karena menghapus penyimpanan partisi tanpa memindai baris satu per satu.

ALTER TABLE LINEITEM DROP PARTITION FOR (date '1992-01-01');

Muat data melalui pertukaran partisi

Gunakan perintah ALTER TABLE EXCHANGE PARTITION untuk menambahkan partisi data baru. Ini memungkinkan Anda memuat batch data ke dalam tabel partisi tanpa menulis ke seluruh tabel.

ALTER TABLE LINEITEM EXCHANGE PARTITION FOR (date '1999-12-01')
    WITH TABLE lineitem_staging;