AI SQL & PostgreSQL/Neon Şema Optimizatörü
Türkçe doğal dil isteklerinizi yüksek performanslı PostgreSQL, Supabase ve MySQL sorgularına dönüştürün. Yavaş çalışan sorguları analiz edin; pgvector HNSW indeksleri ve EXPLAIN ANALYZE performans tavsiyelerini anında kopyalayın.
PostgreSQL, Supabase ve pgvector SQL Optimizasyon Rehberi
Yavaş çalışan web uygulamalarının ve yüksek bulut sunucu faturalarının %80'i eksik indekslemeler, yanlış JOIN stratejileri ve verimsiz alt sorgulardan kaynaklanır.AI SQL & Postgres Optimizer; Türkçe doğal dil isteklerinizi ve yavaş çalışan ham SQL kodlarınızı analiz eder;PostgreSQL, Supabase, Neon ve MySQL için 10 kat daha hızlı çalışan sorgular,HNSW pgvector indeksleri ve EXPLAIN ANALYZE tavsiyeleri üretir.
1. PostgreSQL İndeks Türleri ve Ne Zaman Kullanılmalıdır?
Yanlış indeks türü seçmek sorguyu hızlandırmadığı gibi yazma (INSERT/UPDATE) maliyetini katlar. PostgreSQL indeks türleri karşılaştırması:
| İndeks Türü | Kullanım Senaryosu | Desteklenen Operatörler | Örnek CREATE INDEX Syntax |
|---|---|---|---|
| B-Tree (Varsayılan) | Eşitlik, aralık aramaları ve ORDER BY sıralamaları. | <, <=, =, >=, >, BETWEEN | CREATE INDEX idx_users_email ON users(email); |
| HNSW (pgvector) | Yapay zeka ve RAG embedding vektör benzerlik aramaları. | <=> (Kosinüs), <-> (L2), <#> (Dot) | CREATE INDEX ON docs USING hnsw (embedding vector_cosine_ops); |
| GIN (Generalized Inverted) | JSONB alanlar, array dizileri ve tam metin (Full-Text) aramaları. | @>, ?, ?|, ?&, @@ | CREATE INDEX idx_meta ON products USING gin (metadata); |
| BRIN (Block Range) | Milyonlarca satırlık zaman damgalı log tabloları (düşük bellek tüketimi). | <, <=, =, >=, > | CREATE INDEX idx_logs_created ON logs USING brin (created_at); |
2. Yavaş Sorguları Hızlandıran 4 Altın SQL Kuralı
Sorgularınızı yazarken dikkat etmeniz gereken performans direktifleri:
İhtiyaç duyulmayan geniş metin ve JSON kolonlarının getirilmesi gereksiz ağ trafiği oluşturur ve veritabanının Index-Only Scan yapmasını engeller. Yalnızca ihtiyaç duyulan sütunları seçin.
WHERE LOWER(email) = 'test@test.com' yazmak standart B-Tree indeksini devre dışı bırakır ve tablonun tüm satırlarını tarar (Sequential Scan). Çözüm: Expression index oluşturmak (CREATE INDEX ON users (LOWER(email))) veya veriyi küçük harfle saklamaktır.
Döngü içinde her kayıt için veritabanına gitmek yerine tek bir JOIN veya WITH (Common Table Expression) sorgusu ile tüm ilişkili verileri tek gidiş-dönüşte (single round-trip) getirin.
3. Supabase & Neon pgvector ile Milisaniyelik Vektör Araması
1536 veya 3072 boyutlu OpenAI embedding vektörlerini ararken HNSW (Hierarchical Navigable Small World) indeksi kullanmak sorgu süresini 800ms'den 12ms seviyesine düşürür:
-- 1. pgvector Eklentisini Etkinleştir
CREATE EXTENSION IF NOT EXISTS vector;
-- 2. HNSW İndeksi Oluştur (Kosinüs Benzerliği İçin)
CREATE INDEX IF NOT EXISTS idx_articles_embedding_hnsw
ON articles
USING hnsw (embedding vector_cosine_ops)
WITH (m = 16, ef_construction = 64);
-- 3. Milisaniyelik Benzerlik Sorgusu
SELECT id, title, 1 - (embedding <=> '[0.012, -0.045, ...]') AS similarity
FROM articles
ORDER BY embedding <=> '[0.012, -0.045, ...]'
LIMIT 5;Sıkça Sorulan Sorular (SSS)
EXPLAIN ANALYZE çıktısı nasıl yorumlanmalıdır?
EXPLAIN ANALYZE sorgunun tahmini planını değil, gerçek çalışma süresini raporlar. Çıktıda Seq Scan (sıralı tarama) ve yüksek cost değerleri görüyorsanız ilgili kolona indeks eklemeniz gerekir. Index Scan veya Index Only Scan ideal performanstır.
HNSW ile IVFFlat indeksi arasındaki fark nedir?
IVFFlat daha az bellek kullanır ancak tabloya yeni veriler eklendikçe indeks kalitesi düşer ve yeniden indeksleme gerektirir. HNSW ise biraz daha fazla RAM tüketmesine rağmen hem çok daha yüksek doğruluk (recall) hem de anlık dinamik güncelleme performansı sunar.
Fazla indeks oluşturmak veritabanını yavaşlatır mı?
Evet. İndeksler SELECT sorgularını muazzam hızlandırırken, her INSERT, UPDATE ve DELETE işleminde indeks ağaçlarının da güncellenmesi gerekir. Bu nedenle yalnızca sorgularda sıkça filtreleme ve sıralama yapılan kolonlara indeks konmalıdır.