Optimasi database menggunakan teknik partisi tabel.

 

1. Latar Belakang

Dalam pengelolaan database skala besar, efisiensi dalam pencarian dan manipulasi data menjadi krusial. Salah satu metode untuk meningkatkan performa adalah dengan menggunakan partisi tabel.

    Problem yang Diangkat

Penggunaan tabel tanpa partisi dapat menyebabkan waktu eksekusi query menjadi lebih lama, terutama pada dataset yang besar. Oleh karena itu, penting untuk mengimplementasikan partisi yang sesuai dengan pola akses data.

2. Studi Kasus: Partisi Tabel pada Database Minimarket

2.1 Pembagian Tabel dengan Partisi

a) Partisi Berdasarkan Tahun (RANGE PARTITION)

Skema:

CREATE TABLE transactions (
    id INT NOT NULL AUTO_INCREMENT,
    transaction_date DATE NOT NULL,
    amount DECIMAL(10,2) NOT NULL,
    customer_id INT NOT NULL,
    PRIMARY KEY (id, transaction_date)
) PARTITION BY RANGE (YEAR(transaction_date)) (
    PARTITION p0 VALUES LESS THAN (2020),
    PARTITION p1 VALUES LESS THAN (2021),
    PARTITION p2 VALUES LESS THAN (2022),
    PARTITION p3 VALUES LESS THAN (2023),
    PARTITION p4 VALUES LESS THAN (2024)
);

Penjelasan: Tabel transaksi dibagi berdasarkan tahun untuk mempercepat pencarian data dalam rentang tahun tertentu.

b) Partisi Berdasarkan Wilayah (LIST PARTITION)

Skema:

CREATE TABLE transactions (
    id INT NOT NULL AUTO_INCREMENT,
    transaction_date DATE NOT NULL,
    amount DECIMAL(10,2) NOT NULL,
    region_id INT NOT NULL,
    PRIMARY KEY (id, region_id)
) PARTITION BY LIST (region_id) (
    PARTITION p_jakarta VALUES IN (1),
    PARTITION p_surabaya VALUES IN (2),
    PARTITION p_bandung VALUES IN (3),
    PARTITION p_other VALUES IN (4,5,6,7)
);

Penjelasan: Data transaksi dibagi berdasarkan wilayah untuk mempermudah pengelolaan data per area.

3. Implementasi dan Pengujian

3.1 Redesign Tabel tr_penjualan

Tabel tr_penjualan didesain ulang menjadi tr_penjualan_partisi dengan partisi berdasarkan tahun transaksi.

Skema:

CREATE TABLE tr_penjualan_partisi (
    tgl_transaksi DATETIME DEFAULT NULL,
    kode_cabang VARCHAR(10) DEFAULT NULL,
    kode_kasir VARCHAR(10) DEFAULT NULL,
    kode_item VARCHAR(7) DEFAULT NULL,
    kode_produk VARCHAR(12) DEFAULT NULL,
    jumlah_pembelian INT(11) DEFAULT NULL,
    nama_kasir VARCHAR(40) DEFAULT NULL,
    harga INT(6) DEFAULT NULL
) PARTITION BY RANGE (YEAR(tgl_transaksi)) (
    PARTITION p0 VALUES LESS THAN (2008),
    PARTITION p1 VALUES LESS THAN (2009),
    PARTITION p2 VALUES LESS THAN (2010),
    PARTITION p3 VALUES LESS THAN (2011),
    PARTITION p4 VALUES LESS THAN (2012),
    PARTITION p5 VALUES LESS THAN (2013),
    PARTITION p6 VALUES LESS THAN (2014),
    PARTITION p7 VALUES LESS THAN (2015)
);

Hasil Pengujian Query Berdasarkan Tahun:

SELECT * FROM tr_penjualan_partisi
WHERE tgl_transaksi > DATE('2010-08-01')
AND tgl_transaksi < DATE('2011-07-31');

Rata-rata Waktu Eksekusi: 0.0765 detik

3.2 Perbandingan dengan Tabel Tanpa Partisi

Tabel tr_penjualan_raw dibuat tanpa partisi untuk membandingkan performa dengan tr_penjualan_partisi.

Hasil Pengujian Query Tanpa Partisi:

SELECT * FROM tr_penjualan_raw
WHERE tgl_transaksi > DATE('2010-08-01')
AND tgl_transaksi < DATE('2011-07-31');

Rata-rata Waktu Eksekusi: 0.002 detik

3.3 Pengujian Query Berdasarkan Kolom Lain (kode_cabang)

SELECT * FROM tr_penjualan_partisi WHERE kode_cabang = 'CABANG-001';

Rata-rata Waktu Eksekusi: 3.8296 detik

4. Kesimpulan

  • Partisi tabel memberikan peningkatan performa jika query sering menggunakan kolom yang dijadikan kunci partisi.

  • Jika query dilakukan pada kolom lain yang tidak dipartisi, maka performa bisa lebih lambat dibandingkan tabel tanpa partisi.

  • Pemilihan metode partisi harus mempertimbangkan pola akses data agar lebih efisien.

5. Sumber Referensi

  1. https://www.w3schools.com/mysql/ 

6. Bukti








Comments

Popular posts from this blog

Manajemen User, Role, dan Privilege dalam MySQL

Instalasi dan Konfigurasi Server Database

Optimasi Bottleneck Dalam Mysql