Ana içeriğe geç
Kesit SQL
İleri · Bitirme Projeleri

Bitirme projesi (Sorgu Optimizasyonu): yavaş müşteri raporunu ölç, oku, düzelt, kanıtla

Gerçekçi yavaş bir rapor üzerinde temel ölçüm, plan okuma, yeniden yazma, indeks tasarımı, mutabakat ve karar notu.

Uygulamada aç, 9 alıştırmayı çözÜcretsiz, hesap gerekmez, kurulum yok.

Bu sayfa dersin okuma sürümüdür. Metin bir kutuyu çalıştırmanı ya da adıma geçmeni söylüyorsa dersi uygulamada aç.

Senaryo

Ilgaz Bank kart ekibi her ay müşteri başına kart harcaması raporu alıyor. Rapor yıllar içinde büyüdü, çalışırken ekran bekliyor. Birim yöneticisi soruyor: "Bu raporu hızlandırabilir miyiz? Ne kadar güvenle, karşılığında ne ödeyerek?" Senden sonuç değişmeden hızlandırılmış sorgu ve bir karar notu bekleniyor.

Rapor

SELECT DISTINCT c.customer_id, c.segment,
  (SELECT COUNT(*) FROM bank_txns t
   WHERE t.account_id IN (SELECT a.account_id FROM bank_accounts a WHERE a.customer_id = c.customer_id)
     AND strftime('%Y-%m', t.txn_time) = '2024-12' AND t.txn_type = 'kart_harcama') AS islem,
  (SELECT ROUND(SUM(t.amount)) FROM bank_txns t
   WHERE t.account_id IN (SELECT a.account_id FROM bank_accounts a WHERE a.customer_id = c.customer_id)
     AND strftime('%Y-%m', t.txn_time) = '2024-12' AND t.txn_type = 'kart_harcama') AS toplam
FROM bank_customers c
JOIN bank_accounts x ON x.customer_id = c.customer_id;

Çalıştır ve süreye bak. Bu süre bu tarayıcıda ölçülür, kendi ortamında farklı olur. Karşılaştırmayı süre yerine plana ve sağlamaya dayandıracağız.

Veri

TabloSatırMevcut indeks
bank_customers500Birincil anahtar
bank_accounts849Birincil anahtar
bank_txns42.284Birincil anahtar, account_id

Adımlar

AdımÇıktı
1. Temel ölçümSatır sayısı, işlem toplamı, tutar toplamı: her değişiklik bunlarla sağlanır
2. PlanEski raporun planı
3. DarboğazHangi satır sorun, neden
4. Çekirdek sorguAylık toplam, aranabilir filtre
5. İndeksÇekirdek sorguya kapsayan indeks
6. Yeni raporİlişkili alt sorgu ve DISTINCT yok
7. MutabakatEski ve yeni arasında fark 0
8-9. Kararİndeks bedeli ve yönetici notu
SınırMotor SQLite. Planlar SQLite planıdır, başka motorda aynı yazım başka plan alabilir. Projedeki yaklaşım her motorda geçerlidir: Ölç, oku, tek değişiklik, sağla.

Teslim

Tek sayfa: eski ve yeni plan, mutabakat sonucu, eklenen indeks ve bedeli, öneri. Hız kazancını kendi ortamında ölçmeden yazma.

Kendini değerlendir

ÖlçütBaşlangıçİyiMükemmel
ÖlçümSüre yazılmışPlan ve sağlama da varBirkaç ölçüm, önbellek etkisi not edilmiş
DoğrulukSatır sayısı aynıToplamlar aynıİki yönlü EXCEPT sıfır
Kararİndeks eklenmişBedel yazılmışSıklık, yazma yükü ve alternatif birlikte tartılmış
Alıştırmalara geç (9)