Pertemuan ke-3: Struktur Data dan Optimasi Tabel di PostgreSQL

Pertemuan ke-3: Struktur Data dan Optimasi Tabel di PostgreSQL

Pada pertemuan ini, kita akan membahas bagaimana cara merancang tabel yang optimal, memahami tipe data yang tersedia di PostgreSQL, dan menggunakan indeks untuk meningkatkan performa query.


1️⃣ Memilih Tipe Data yang Tepat

Memilih tipe data yang sesuai dapat meningkatkan efisiensi penyimpanan dan performa database.

➤ Tipe Data Umum di PostgreSQL

Tipe DataKeteranganContoh
INTEGERBilangan bulat100, 2500
NUMERIC(precision, scale)Angka dengan desimal presisi tinggi9999.99
VARCHAR(n)Teks dengan panjang maksimum n‘John Doe’
TEXTTeks tanpa batasan panjang‘Deskripsi panjang…’
BOOLEANNilai TRUE atau FALSETRUE
DATEFormat tanggal‘2025-01-30’
TIMESTAMPFormat tanggal & waktu‘2025-01-30 14:30:00’
JSON/JSONBMenyimpan data dalam format JSON‘{“nama”: “John”}’

📌 Contoh Implementasi dalam Tabel

CREATE TABLE pelanggan (
    id SERIAL PRIMARY KEY,
    nama VARCHAR(100) NOT NULL,
    email VARCHAR(150) UNIQUE,
    saldo NUMERIC(12,2) DEFAULT 0,
    status_aktif BOOLEAN DEFAULT TRUE,
    tanggal_daftar TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);


2️⃣ Normalisasi Database

Normalisasi bertujuan untuk menghindari redundansi data dan inkonsistensi.

📌 Contoh Kesalahan:

CREATE TABLE transaksi (
    id SERIAL PRIMARY KEY,
    pelanggan_nama VARCHAR(100),
    pelanggan_email VARCHAR(150),
    jumlah NUMERIC(12,2)
);

🚫 Masalah: Jika pelanggan yang sama melakukan transaksi berulang kali, kita menyimpan nama & email berulang kali.

Solusi: Pisahkan Data ke Tabel yang Berbeda

CREATE TABLE pelanggan (
    id SERIAL PRIMARY KEY,
    nama VARCHAR(100) NOT NULL,
    email VARCHAR(150) UNIQUE
);

CREATE TABLE transaksi (
    id SERIAL PRIMARY KEY,
    pelanggan_id INT REFERENCES pelanggan(id),
    jumlah NUMERIC(12,2),
    tanggal TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

Keuntungan: ✔ Data pelanggan hanya disimpan sekali.
✔ Data lebih terstruktur dan mudah diubah.


3️⃣ Indeks untuk Optimasi Query

Indeks mempercepat pencarian data di tabel besar.

📌 Jenis Indeks di PostgreSQL:
🔹 B-Tree Index (Default, digunakan untuk pencarian umum)
🔹 GIN Index (Digunakan untuk JSON & full-text search)
🔹 Hash Index (Cepat untuk pencarian dengan = saja)

➤ Membuat Indeks

Misalnya, kita sering mencari pelanggan berdasarkan email:

CREATE INDEX idx_pelanggan_email ON pelanggan(email);

Untuk mempercepat pencarian transaksi berdasarkan pelanggan:

CREATE INDEX idx_transaksi_pelanggan_id ON transaksi(pelanggan_id);

➤ Melihat Indeks yang Ada

SELECT * FROM pg_indexes WHERE tablename = 'transaksi';

➤ Menghapus Indeks

DROP INDEX idx_transaksi_pelanggan_id;


4️⃣ Tugas Praktik

1️⃣ Buat tabel pelanggan dan transaksi dengan struktur yang telah dijelaskan.
2️⃣ Tambahkan indeks pada kolom email di tabel pelanggan.
3️⃣ Coba insert beberapa data ke dalam tabel.
4️⃣ Jalankan query EXPLAIN ANALYZE untuk melihat performa query sebelum & sesudah indeks.

EXPLAIN ANALYZE SELECT * FROM pelanggan WHERE email = 'test@email.com';


🎯 Kesimpulan

  • Pemilihan tipe data yang tepat dapat menghemat penyimpanan dan meningkatkan kecepatan query.
  • Normalisasi database menghindari duplikasi data dan meningkatkan integritas.
  • Indeks sangat penting untuk meningkatkan performa pencarian data.

Leave a comment