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.
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.
