DEV.RUN Logo
DEV.RUN
SEMUA ARTIKEL
Engineering2026-10-156 min read

Mengapa Kami Menghindari ORM untuk Query Agregasi dan Laporan Berat

ORM sangat efektif untuk update data transaksional. Namun ketika agregasi mencapai skala produksi, raw SQL dan CTE jauh lebih efisien.

WRITTEN BY Raden DEVRun (Founding Engineer)

Masalah pada Grafik Entitas ORM

Dalam membangun aplikasi web, ORM sering menjanjikan kemudahan agar developer tidak perlu memikirkan SQL. Untuk mutasi sederhana—seperti mengambil profil pengguna atau memperbarui status invoice—abstraksi ini cukup membantu.

Namun saat klien membutuhkan dashboard operasional yang merekonsiliasi ratusan ribu data transaksi, ORM sering kali menarik seluruh baris ke memori server sebelum dihitung.

N+1 Tersembunyi pada Dashboard Analitik

Alih-alih membiarkan PostgreSQL melakukan agregasi secara efisien menggunakan index di database, pemanggilan relasi ORM yang tidak hati-hati justru memicu puluhan query berulang.

Raw SQL Terkontrol dengan Drizzle sql template

Di DEVRun, kami menjaga keamanan tipe data (type-safety) tanpa mengorbankan performa mesin database. Dengan template tag sql di Drizzle, query kami langsung dieksekusi sebagai satu CTE efisien:

WITH ringkasan_harian AS (
  SELECT 
    date_trunc('day', created_at) AS tanggal,
    gateway_id,
    SUM(amount) AS total_volume,
    COUNT(id) AS jumlah_transaksi
  FROM transactions
  WHERE status = 'settled'
  GROUP BY 1, 2
)
SELECT * FROM ringkasan_harian ORDER BY tanggal DESC;

Aturan Studio Kami untuk Query

Aturan 1: Operasi CRUD sederhana menggunakan builder Drizzle. Aturan 2: Query laporan banyak tabel wajib menggunakan raw SQL yang diaudit. Aturan 3: Selalu cek efisiensi query dengan EXPLAIN ANALYZE.