MATERI 5 - OPTIMASI DATABASE , DAN PARTISI TABEL
Saya, Marinda Cahya P, dari Kelas 2B dengan nomor absen 16, menulis materi ini sebagai rangkuman dari Praktikum Instalasi dan Konfigurasi Server Database yang dilaksanakan pada tanggal 12 Maret 2025. Topik yang dibahas dalam praktikum ini adalah Optimasi Database dan Partisi Tabel Rangkuman ini disusun sebagai salah satu syarat untuk memenuhi tugas praktikum Mata Kuliah Sistem Manajemen Basis Data. Jika terdapat kesalahan dalam penulisan atau gambar yang kurang jelas, saya mohon maaf.
OPTIMASI DATABASE DAN PARTISI TABEL
Latar Belakang
Seiring dengan bertambahnya volume data dalam sistem basis data, performa akses dan pengolahan data menjadi tantangan besar. Untuk mengatasi masalah ini, beberapa teknik optimasi database diperlukan, seperti indexing, query optimization, caching, denormalisasi, dan partisi tabel.
Salah satu metode yang sangat efektif untuk menangani tabel dengan jutaan hingga miliaran baris adalah partisi tabel. Teknik ini membagi tabel besar menjadi beberapa bagian yang lebih kecil berdasarkan kriteria tertentu, sehingga mempercepat pencarian dan pengolahan data.
Permasalahan yang diangkat
- Bagaimana cara mengoptimalkan performa database dalam menangani jumlah data yang besar?
- Bagaimana cara menerapkan partisi tabel untuk mempercepat akses data?
- Bagaimana pengaruh partisi tabel terhadap performa query?
- Bagaimana perbandingan performa antara tabel tanpa partisi dan tabel dengan partisi?
Skenario aktivitas
- Untuk memahami konsep partisi tabel dan penerapannya dalam optimasi database, dilakukan beberapa tahapan:
- Pembuatan tabel dengan partisi berdasarkan tahun transaksi.
- Pemasukan data ke dalam tabel yang telah dipartisi.
- Pengujian performa query sebelum dan sesudah menggunakan partisi.
- Studi kasus penerapan partisi tabel pada database minimarket.
- Menganalisis perbandingan performa antara tabel dengan partisi dan tanpa partisi.
Pembahasan (Latihan Soal)
1. Jalankan semua contoh script diatas sampai anda benar-benar memahami konsep partisi, cara kerja partisi, manfaat partisi tabel.
- Membuat tabel transactions dengan partisi berdasarkan tahun transaksiJangan lupa, tempat menyimpan file dataset.
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)
- Menambahkan data ke dalam tabel transactions
INSERT INTO transactions (transaction_date, amount, customer_id) VALUES
('2019-06-15', 150000, 101),
('2020-07-20', 250000, 102),
('2021-08-25', 500000, 103),
('2022-09-10', 350000, 104),
- Mengecek jumlah record per partisi
SELECT TABLE_NAME, PARTITION_NAME, TABLE_ROWS
FROM INFORMATION_SCHEMA.PARTITIONS
- Menjalankan query yang di optimasi dengan partisi
a. Redesaian tabel tr_penjualan, tambahkan partisi pada tabel tersebut. Sehingga ada tabel baru tr_penjualan_partisi
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)
);
b. isikan tabel tr_penjualan_partisi
c. Lakukan penambahan data dummy di tr_penjualan_partisi dengan susunan
- Tahun 2008:
ALTER TABLE tr_penjualan
ADD COLUMN nama_kasir VARCHAR(40) DEFAULT NULL,
ADD COLUMN harga INT(6) DEFAULT NULL;
Hasil:
Dan setelah di tambah kolom tersebut maka akan berhasil
INSERT INTO tr_penjualan_partisi (tgl_transaksi, kode_cabang, kode_kasir, kode_item,
kode_produk, jumlah_pembelian, nama_kasir, harga)
SELECT tgl_transaksi, kode_cabang, kode_kasir, kode_item, kode_produk, jumlah_pembelian,
nama_kasir, harga FROM tr_penjualan WHERE YEAR(tgl_transaksi) = 2008;
- Tahun 2009:
Script Insert untuk tahun 2009
INSERT INTO tr_penjualan_partisi (tgl_transaksi, kode_cabang, kode_kasir, kode_item,
kode_produk, jumlah_pembelian, nama_kasir, harga) (
SELECT DATE_ADD(tgl_transaksi, INTERVAL 1 YEAR), kode_cabang, kode_kasir, kode_item,
kode_produk, jumlah_pembelian, nama_kasir, harga
FROM tr_penjualan
- Tahun 2010:
INSERT INTO tr_penjualan_partisi (tgl_transaksi, kode_cabang, kode_kasir, kode_item,
kode_produk, jumlah_pembelian, nama_kasir, harga)
SELECT DATE_ADD(tgl_transaksi, INTERVAL 1 YEAR), kode_cabang, kode_kasir, kode_item,
- Tahun 2011:
INSERT INTO tr_penjualan_partisi (tgl_transaksi, kode_cabang, kode_kasir, kode_item,
kode_produk, jumlah_pembelian, nama_kasir, harga)
SELECT DATE_ADD(tgl_transaksi, INTERVAL 1 YEAR), kode_cabang, kode_kasir, kode_item, kode_produk, jumlah_pembelian, nama_kasir, harga FROM tr_penjualan WHERE YEAR(tgl_transaksi) = 2011;
- Tahun 2012:
-- Mengisi data untuk tahun 2012 dengan menyesuaikan tahun
INSERT INTO tr_penjualan_partisi (tgl_transaksi, kode_cabang, kode_kasir, kode_item,
kode_produk, jumlah_pembelian, nama_kasir, harga)
SELECT DATE_ADD(tgl_transaksi, INTERVAL 1 YEAR), kode_cabang, kode_kasir, kode_item,
- Tahun 2013:
-- Mengisi data untuk tahun 2013 dengan menyesuaikan tahun
INSERT INTO tr_penjualan_partisi (tgl_transaksi, kode_cabang, kode_kasir, kode_item,
kode_produk, jumlah_pembelian, nama_kasir, harga)
SELECT DATE_ADD(tgl_transaksi, INTERVAL 1 YEAR), kode_cabang, kode_kasir, kode_item, kode_produk, jumlah_pembelian, nama_kasir, harga FROM tr_penjualan WHERE YEAR(tgl_transaksi) = 2013;
- Tahun 2014:
-- Mengisi data untuk tahun 2014 dengan menyesuaikan tahun
INSERT INTO tr_penjualan_partisi (tgl_transaksi, kode_cabang, kode_kasir, kode_item,
kode_produk, jumlah_pembelian, nama_kasir, harga)
SELECT DATE_ADD(tgl_transaksi, INTERVAL 1 YEAR), kode_cabang, kode_kasir, kode_item,
d. Pengisian tabel tr_penjualan_partisi disesuai dengan kapasitas LAPTOP masing masing. Makin banyak data, makin terlihat efek dari partisi table.
b. Setelah diisikan, maka susunan record sesuai partisi akan ditampilkan seperti berikut:
SELECT TABLE_NAME, PARTITION_NAME, TABLE_ROWS
FROM INFORMATION_SCHEMA.PARTITIONS
WHERE TABLE_NAME = 'tr_penjualan_partisi';
- Tr_penjualan_raw = struktur biasa
-- Membuat tabel tr_penjualan_raw dengan struktur yang sama tetapi tanpa partisi
CREATE TABLE tr_penjualan_raw (
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
);
- Tr_penjualan_partisi = struktur tabel ter partisi
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
)
5. Pengujian Tabel
Jalankan query berikut dengan perulangan 10x. lakukan pencatatan waktu running setiap query. Dan ambil rata-ratanya.
SELECT * FROM tr_penjualan_raw
WHERE tgl_transaksi > DATE('2010-08-01')
AND tgl_transaksi < DATE('2011-07-31')
SELECT * FROM tr_penjualan_partisi
WHERE tgl_transaksi > DATE('2010-08-01')
AND tgl_transaksi < DATE('2011-07-31')
-- Pengujian pada tabel tr_penjualan_raw
SELECT * FROM tr_penjualan_raw
-- Pengujian pada tabel dengan tr_penjualan_partisi
SELECT * FROM tr_penjualan_partisi
1. Kesimpulan dari tabel percobaan yang dilakukan.
Query dengan tgl_transaksi (kolom partisi) lebih cepat karena MySQL hanya membaca partisi yang relevan.
- Rata-rata waktu eksekusi: 0.0049 detik (sangat cepat). Query dengan kolom lain (kode_cabang, dll.) tidak mendapat keuntungan dari partisi, sehingga waktu eksekusinya hampir sama dengan tabel tanpa partisi.
- Rata-rata waktu eksekusi: 1.14 detik (lebih lambat). Partisi sangat efektif jika sering melakukan pencarian berdasarkan kolom yang digunakan untuk partisi (misalnya tgl_transaksi).
Jika sering mencari berdasarkan kolom lain, gunakan indeks tambahan pada kolom tersebut untuk meningkatkan performa.
Kesimpulan
- Partisi tabel meningkatkan performa database dengan mengurangi jumlah data yang harus diproses dalam query.
- Query dengan kolom partisi jauh lebih cepat, karena MySQL hanya membaca data dalam partisi yang relevan.
- Partisi mempermudah manajemen data, seperti penghapusan data lama tanpa mempengaruhi data baru.
- Namun, partisi tidak selalu efektif jika query lebih sering menggunakan kolom yang tidak dipartisi. Dalam kasus ini, indeks tambahan lebih disarankan.
- Dengan menerapkan partisi tabel yang tepat, database dapat menangani data dalam skala besar dengan lebih efisien, mempercepat eksekusi query, serta mengoptimalkan kinerja sistem secara keseluruhan.




















Komentar
Posting Komentar