Use Cases

Panduan Praktis Optimasi SQL dengan Claude Code

Pelajari tentang panduan praktis optimasi SQL menggunakan Claude Code. Dilengkapi tips praktis dan contoh kode.

Praktik Optimasi Query SQL dengan Claude Code

Masalah performa database terjadi di banyak proyek. Dengan Claude Code, mulai dari identifikasi penyebab query lambat hingga desain index, optimasi SQL bisa dilakukan secara efisien.

Analisis Slow Query

Cara Membaca Execution Plan

> Analisis penyebab query berikut lambat:
> SELECT u.*, COUNT(o.id) as order_count
> FROM users u
> LEFT JOIN orders o ON u.id = o.user_id
> WHERE u.created_at > '2025-01-01'
> GROUP BY u.id
> ORDER BY order_count DESC
> LIMIT 20;

Jika kamu menempelkan hasil execution plan (EXPLAIN ANALYZE) ke Claude Code, dia akan mengidentifikasi bottleneck dan menyajikan saran perbaikan.

-- Setelah perbaikan: hanya pilih kolom yang diperlukan, manfaatkan index
SELECT
  u.id,
  u.name,
  u.email,
  COUNT(o.id) as order_count
FROM users u
LEFT JOIN orders o ON u.id = o.user_id
WHERE u.created_at > '2025-01-01'
GROUP BY u.id, u.name, u.email
ORDER BY order_count DESC
LIMIT 20;

-- Index yang direkomendasikan
CREATE INDEX idx_users_created_at ON users(created_at);
CREATE INDEX idx_orders_user_id ON orders(user_id);

Desain Index

Optimasi Composite Index

> Desain index yang optimal untuk kondisi pencarian berikut:
> - Range search berdasarkan status + created_at
> - Filter + sort berdasarkan category + price
-- Tempatkan kondisi equality di depan, kondisi range di belakang
CREATE INDEX idx_products_status_created
  ON products(status, created_at DESC);

-- Covering index untuk menghindari akses tabel tambahan
CREATE INDEX idx_products_category_price
  ON products(category, price)
  INCLUDE (name, description);

Claude Code juga menjelaskan prinsip desain seperti “letakkan kolom dengan cardinality tinggi di depan” dan “letakkan kolom range search di akhir index”.

Deteksi dan Pemecahan Masalah N+1

> Periksa apakah kode ORM ini memiliki masalah N+1:
// Ada masalah N+1
const users = await prisma.user.findMany();
for (const user of users) {
  const orders = await prisma.order.findMany({
    where: { userId: user.id },
  });
}

// Setelah perbaikan: ambil sekaligus dengan include
const users = await prisma.user.findMany({
  include: {
    orders: true,
  },
});

Pemanfaatan Window Function

Query agregasi dan ranking yang kompleks bisa ditulis lebih efisien dengan window function dibandingkan subquery.

-- Ranking penjualan dalam setiap kategori
SELECT
  product_name,
  category,
  revenue,
  RANK() OVER (PARTITION BY category ORDER BY revenue DESC) as rank,
  SUM(revenue) OVER (PARTITION BY category) as category_total
FROM product_sales;

Partitioning

Partitioning juga efektif untuk tabel dengan data besar. Jika kamu meminta Claude Code “partisi tabel ini berdasarkan bulan”, dia akan menyarankan strategi partisi yang sesuai.

Summary

Dengan Claude Code, kamu bisa meningkatkan secara konsisten mulai dari analisis bottleneck query SQL, desain index, hingga optimasi level ORM. Lihat juga Migrasi Database dan Pemanfaatan Prisma ORM sebagai referensi.

Untuk detail performa SQL, lihat Use The Index, Luke.

#Claude Code #SQL #database #performance #optimization