PuluhLabs
Database Performance & Query Tuning Engine

Pengoptimal Kueri SQL & Detektor Index Database Lambat

Diagnostik kueri SQL PostgreSQL & MySQL Anda. Temukan celah *sequential scan*, *unindexed foreign keys*, dan buat index gabungan optimal untuk melipatgandakan kecepatan backend hingga 95%.

Kueri SQL Anda

Temuan Hambatan Performa (3 Terdeteksi)

Anti-pattern SELECT * terdeteksi

Mengambil seluruh kolom meningkatkan transfer buffer I/O dan mencegah database menggunakan Covering Index (Index-Only Scan).

šŸ’” Saran: Sebutkan kolom spesifik yang dibutuhkan saja (misal: o.id, o.total_amount, u.email).
Leading Wildcard LIKE "%..." memicu Full Table Scan

B-Tree Index tidak dapat digunakan jika ada karakter wildcard % di awal string pencarian.

šŸ’” Saran: Gunakan PostgreSQL Trigram (pg_trgm) GIN Index atau MySQL Fulltext search untuk pencarian substring.
Missing Composite Index (Filter + Sort)

Database harus melakukan in-memory sort (Sort Method: quicksort/top-N heapsort) yang membebani CPU bila tidak ada index gabungan.

šŸ’” Saran: Buat Composite Index yang mengombinasikan kolom WHERE dengan kolom ORDER BY.
Proyeksi Peningkatan Throughput:
+65% - 95%
Mereduksi CPU spike & disk I/O locking secara masif.
Rekomendasi Skrip Index DDL
-- 1. Aktifkan ekstensi Trigram untuk pencarian substring cepat
CREATE EXTENSION IF NOT EXISTS pg_trgm;

-- 2. Composite Index untuk filter status, created_at, dan sorting total_amount
CREATE INDEX CONCURRENTLY idx_orders_status_created_amount 
ON orders (status, created_at, total_amount DESC);

-- 3. GIN Index untuk pencarian email substring tanpa Sequential Scan
CREATE INDEX CONCURRENTLY idx_users_email_trgm 
ON users USING gin (email gin_trgm_ops);

-- 4. Pastikan Foreign Key memiliki index
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_orders_user_id 
ON orders (user_id);
Kueri Hasil Refactor
-- Kueri yang telah dioptimasi (Zero Full-Table Scan)
SELECT 
    o.id AS order_id,
    o.total_amount,
    o.created_at,
    u.id AS user_id,
    u.email
FROM orders o
INNER JOIN users u ON o.user_id = u.id
WHERE o.status = 'completed'
  AND o.created_at >= '2026-01-01'
  AND u.email LIKE '%@corporate.co.id'
ORDER BY o.total_amount DESC
LIMIT 50;
Database Masih Lambat under Traffic Tinggi? PuluhLabs menangani tuning database PostgreSQL/MySQL, partisi tabel, dan Redis caching layer.
Konsultasi Database Tuning