Veritabanı8 dk

PostgreSQL B-Tree İndeksleme ve Veritabanı Sorgu Hızlandırma

Sorguları milisaniyeler seviyesine indiren indeks mimarisi: B-Tree ağaç yapısı, EXPLAIN ANALYZE kullanımı ve bileşik indeks stratejileri.

YazarŞakir Ortataş

PostgreSQL B-Tree İndeksleme ve Veritabanı Sorgu Hızlandırma — İnteraktif Sistem Modeli

PostgreSQL & Prisma

İzometrik modeli inceleyin veya sekmeler arasında geçiş yaparak farklı mimarileri keşfedin.

Veritabanında kayıt sayısı yüz binleri aştığında, indeks olmayan tablolarda yapılan her SELECT sorgusu tam tablo taraması (Seq Scan) tetikler. Bu durum disk I/O yükünü fırlatır ve tüm sistemi kilitler.

B-Tree (Balanced Tree) Mimarisi Nasıl Çalışır?

PostgreSQL varsayılan olarak B-Tree indeksleme kullanır. B-Tree, verileri sıralı ve dengeli bir ağaç yapısında tutarak arama karmaşıklığını O(N) seviyesinden O(log N) seviyesine indirir. Milyonlarca satır arasından aranan tek bir kayıt 3-4 disk okumasıyla tespit edilir.

Bileşik İndekslerde Sıralama Kuralı

Birden fazla sütun içeren bileşik indekslerde (composite index) sütunların yazılış sırası hayati önem taşır. Eşitlik (equality) koşulu olan sütunlar en başa, aralık (range) veya sıralama (order by) koşulları ise sonraya konmalıdır.

EXPLAIN ANALYZE ile İcra Planı Okuma

Sorgular optimize edilirken tahminlere değil, EXPLAIN ANALYZE çıktısındaki gerçek süreler ve index scan türlerine bakılmalıdır. Doğru indeksle 1200ms süren ağır bir raporlama sorgusu 4ms düzeyine düşürülebilir.

PostgreSQL B-Tree İndeksleme ve Veritabanı Sorgu Hızlandırma · Canlı Kod BloğuVeritabanı · TS 5.x
PostgreSQL B-Tree İndeksleme ve Veritabanı Sorgu Hızlandırma · Canlı Kod Bloğu
60 FPS · TS 5.x · Running
1// Prisma schema ve sorgu optimizasyonu
2// CREATE INDEX idx_users_active_created ON "User" ("status", "createdAt" DESC);
3export async function getActiveUsersCursor(cursor?: string, take = 25) {
4 return prisma.user.findMany({
5 take,
6 skip: cursor ? 1 : 0,
7 cursor: cursor ? { id: cursor } : undefined,
8 where: {
9 status: "ACTIVE",
10 deletedAt: null,
11 },
12 select: {
13 id: true,
14 email: true,
15 displayName: true,
16 createdAt: true,
17 },
18 orderBy: { createdAt: "desc" },
19 });
20}
İletişim

Teknik vizyonunuzu çalışan bir ürüne dönüştürelim

TypeScript · React Native · React · NestJS · Node.js