Traffine I/O

Bahasa Indonesia

2023-03-20

Partisi dalam SQL

Partisi dalam SQL

Partisi dalam SQL adalah teknik untuk membagi data tabel menjadi bagian-bagian yang lebih kecil dan lebih mudah dikelola yang disebut partisi. Fungsi ini sangat berguna ketika sebuah tabel berisi volume data yang besar. Dengan membagi data menjadi area-area tertentu, efisiensi operasi basis data meningkat, sehingga proses pengambilan data menjadi jauh lebih cepat.

Keuntungan Menggunakan Partisi

Ada banyak keuntungan dalam menggunakan partisi dalam SQL, berikut adalah beberapa di antaranya:

  • Peningkatan Performa SQL
    Operasi SQL menjadi lebih cepat karena pemindaian tabel penuh hanya dapat mengakses partisi yang diperlukan daripada memindai seluruh tabel. Ini juga memungkinkan akses paralel ke setiap partisi, sehingga hasil dapat dihitung lebih cepat.

  • Peningkatan Paralelisme
    Saat memperbarui data dalam sebuah partisi, setiap partisi dikunci secara individu, memungkinkan pekerjaan dilakukan secara paralel tanpa hambatan.

  • Optimasi Statistik dan Pemeliharaan
    Dengan partisi, mungkin untuk memperbarui statistik atau mengoptimalkan setiap partisi secara individu. Kontrol terperinci ini membuat tugas pemeliharaan rutin lebih efisien dan kurang mengganggu kinerja sistem secara keseluruhan.

Jenis-Jenis Partisi dalam SQL

Saya akan menjelaskan berbagai jenis metode partisi yang tersedia dalam SQL.

Partisi Rentang

Partisi rentang membagi sebuah tabel menjadi partisi berdasarkan rentang nilai. Metode ini umum digunakan ketika data yang akan dipartisi memiliki rentang logis di mana data dapat didistribusikan, seperti tanggal, waktu, atau rentang numerik.

Misalnya, bayangkan sebuah tabel pesanan, dan kita ingin memartisinya berdasarkan tanggal pesanan. Kita dapat membuat partisi untuk setiap tahun, di mana setiap partisi akan berisi pesanan yang dibuat dalam tahun tersebut.

sql
CREATE TABLE pesanan (
  id_pesanan INT NOT NULL,
  id_pelanggan INT,
  tanggal_pesanan DATE NOT NULL DEFAULT '1970-01-01',
  nilai_pesanan DECIMAL(10,2)
)
PARTITION BY RANGE ( YEAR(tanggal_pesanan) ) (
  PARTITION p1970an VALUES LESS THAN (1980),
  PARTITION p1980an VALUES LESS THAN (1990),
  PARTITION p1990an VALUES LESS THAN (2000),
  PARTITION p2000an VALUES LESS THAN MAXVALUE
);

Di sini, tabel pesanan dipartisi berdasarkan rentang tanggal_pesanan. Kita telah menentukan empat partisi yang mengelompokkan pesanan dari tahun 1970-an, 1980-an, 1990-an, dan 2000-an secara berturut-turut.

Partisi Daftar

Partisi daftar memungkinkan kita membagi data berdasarkan daftar nilai yang telah ditentukan sebelumnya. Pendekatan ini berguna ketika data yang akan dipartisi tidak cocok dengan rentang tertentu tetapi dapat dikelompokkan ke dalam kategori-kategori tertentu.

Pertimbangkan contoh di mana sebuah perusahaan memiliki toko di berbagai wilayah, dan mereka ingin mempartisi data penjualan mereka berdasarkan wilayah-wilayah tersebut.

sql
CREATE TABLE penjualan (
  id_penjualan INT NOT NULL,
  id_produk INT,
  id_wilayah INT,
  tanggal_penjualan DATE,
  nilai_penjualan DECIMAL(10,2)
)
PARTITION BY LIST (id_wilayah) (
  PARTITION pUtara VALUES IN (1, 2, 3),
  PARTITION pTimur VALUES IN (4, 5, 6),
  PARTITION pBarat VALUES IN (7, 8, 9),
  PARTITION pSelatan VALUES IN (10, 11, 12)
);

Dalam kasus ini, setiap partisi mewakili sebuah wilayah, diidentifikasi oleh daftar ID wilayah.

Partisi Hash

Partisi hash mendistribusikan data secara merata ke dalam sejumlah partisi yang telah ditentukan menggunakan fungsi hash. Jenis partisi ini berguna ketika tidak ada rentang atau daftar logis untuk mempartisi data, dan tujuannya adalah memastikan distribusi data yang merata.

Mari kita pertimbangkan mempartisi data karyawan dalam sebuah organisasi ke dalam beberapa partisi.

sql
CREATE TABLE karyawan (
  id_karyawan INT NOT NULL,
  nama_karyawan VARCHAR(30),
  posisi_karyawan VARCHAR(30),
  gaji_karyawan DECIMAL(10,2)
)
PARTITION BY HASH (id_karyawan)
PARTITIONS 5;

Dalam kasus ini, tabel karyawan dipartisi menjadi lima partisi yang sama besar menggunakan id karyawan (id_karyawan).

Partisi Kunci

Partisi kunci adalah kasus khusus dari partisi hash di mana kunci partisi adalah seluruh kunci primer atau sebagian dari kunci primer. Ini digunakan terutama ketika Anda ingin mendistribusikan data secara merata dan tabel Anda memiliki kunci primer.

Misalkan kita memiliki tabel produk, dan kita ingin mempartisi data berdasarkan id_produk yang merupakan kunci primer.

sql
CREATE TABLE produk (
  id_produk INT NOT NULL PRIMARY KEY,
  nama_produk VARCHAR(30),
  harga_produk DECIMAL(10,2)
)
PARTITION BY KEY(id_produk)
PARTITIONS 3;

Dalam skenario ini, tabel produk dipartisi menjadi tiga partisi berdasarkan id_produk.

Subpartisi

Subpartisi adalah pembagian lebih lanjut dari partisi menjadi unit-unit yang lebih kecil, menciptakan skema partisi dua tingkat. Ini sangat berguna ketika Anda ingin mendistribusikan data secara lebih terperinci. Metode ini sering menggabungkan dua strategi partisi yang berbeda. Misalnya, Anda mungkin mempartisi data berdasarkan rentang terlebih dahulu dan kemudian menggabungkan subpartisi tersebut berdasarkan daftar atau hash.

Mari kita pertimbangkan sebuah skenario penjualan di mana sebuah perusahaan ingin mempartisi catatan penjualan mereka berdasarkan tahun (sebuah rentang) dan kemudian mempartisi lebih lanjut berdasarkan wilayah (daftar).

sql
CREATE TABLE penjualan (
  id_penjualan INT NOT NULL,
  id_wilayah INT,
  tanggal_penjualan DATE NOT NULL DEFAULT '1970-01-01',
  nilai_penjualan DECIMAL(10,2)
)
PARTITION BY RANGE( YEAR(tanggal_penjualan) )
SUBPARTITION BY LIST(id_wilayah) (
  PARTITION p1970an VALUES LESS THAN (1980) (
    SUBPARTITION sUtara VALUES IN (1, 2, 3),
    SUBPARTITION sTimur VALUES IN (4, 5, 6)
  ),
  PARTITION p1980an VALUES LESS THAN (1990) (
    SUBPARTITION sBarat VALUES IN (7, 8, 9),
    SUBPARTITION sSelatan VALUES IN (10, 11, 12)
  ),
  PARTITION p1990an VALUES LESS THAN (2000) (
    SUBPARTITION sUtara1 VALUES IN (1, 2, 3),
    SUBPARTITION sTimur1 VALUES IN (4, 5, 6)
  ),
  PARTITION p2000an VALUES LESS THAN MAXVALUE (
    SUBPARTITION sBarat1 VALUES IN (7, 8, 9),
    SUBPARTITION sSelatan1 VALUES IN (10, 11, 12)
  )
);

Dalam contoh ini, tabel penjualan pertama-tama dipartisi berdasarkan rentang, membagi data berdasarkan dekade penjualan. Setiap partisi ini kemudian dibagi lebih lanjut menjadi subpartisi berdasarkan daftar, di mana setiap subpartisi berisi penjualan dari wilayah tertentu. Pendekatan ini menawarkan tingkat pemisahan data yang lebih detail, membuat pengambilan data dan pemeliharaan lebih efisien.

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!