Senaryo
Ilgaz Bank'ın gün sonu raporu yavaşladı ve denetçiler, analistlerin ham hesap tablolarına doğrudan eriştiğini fark etti. Görevin: raporu hızlandırmak ve raporlama için güvenli bir katman kurmak.
Yavaş rapor
SELECT date(txn_time) AS gun, txn_type, COUNT(*) AS adet, ROUND(SUM(amount), 0) AS toplam
FROM bank_txns
WHERE strftime('%Y-%m', txn_time) = '2024-12'
GROUP BY date(txn_time), txn_type
ORDER BY gun, txn_type;
Sorunlar: tarih sütunu fonksiyon içinde (SARGable değil), txn_time üzerinde indeks yok.
Derinleş: değişikliği güvenle üretime almak
Çalışma planı
- Ölç, sonra değiştir. Değişiklikten önce raporun süresini, okuduğu satır sayısını ve sorgu planını kaydet. Ölçüm yoksa “hızlandı” iddiası da yoktur.
- Sonucun aynı kaldığını kanıtla. SARGable yazım bir yeniden yazımdır; çıktı satır satır aynı olmalı (Ek görev 1).
- İndeksi seçerken seçiciliğe bak. 8 farklı değeri olan
txn_typetek başına zayıf bir indekstir; tarih ya da hesap sütunu çok daha seçicidir (Ek görev 2). - Geri alma planı.
DROP INDEXveDROP VIEWkomutlarını değişiklik notuna önceden yaz.
Kontrol listesi
- Aralık sınırı.
txn_time <= '2024-12-31'yazmak 31 Aralık'ı gece yarısında keser. Aşağıdaki sorgu farkı gösterir: doğru aralık 3.584 hareket, hatalı aralık 3.383; 201 hareket sessizce kaybolur. - Satır ve toplam mutabakatı. Eski ve yeni rapor aynı adet ve tutarı vermeli: 3.584 hareket, 10.832.255 TL net.
- Yetki testi. Analist rolüyle ham tabloya SELECT denemesi hata vermeli; görünüme SELECT çalışmalı.
- Yazma maliyeti. Her yeni indeks INSERT'leri yavaşlatır; günde kaç hareket yazıldığını not et.
SELECT SUM(CASE WHEN txn_time >= '2024-12-01' AND txn_time < '2025-01-01' THEN 1 ELSE 0 END) AS dogru_aralik,
SUM(CASE WHEN txn_time >= '2024-12-01' AND txn_time <= '2024-12-31' THEN 1 ELSE 0 END) AS hatali_aralik
FROM bank_txns;
Planı görmek için SQL türüne göre EXPLAIN (PostgreSQL, MySQL), EXPLAIN QUERY PLAN (SQLite) ya da gerçek yürütme planı (SQL Server) kullan; indeks öncesi ve sonrası planı yan yana koy.
Teslim
Değişiklik kuruluna tek sayfa: önce/sonra ölçüm tablosu, mutabakat sonucu, yetki matrisi (rol × nesne × izin), geri alma komutları.
txn_time indeksi eklenerek tam tablo taraması yerine aralık taraması yapıyor; çıktı eskisiyle birebir aynı (153 satır, 3.584 hareket). Analistler artık ham tablolar yerine iki görünüme erişiyor ve ad soyad maskeli. Kalan risk raporun canlı sistemde çalışması; okuma replikasına taşınmasını öneriyoruz.Kendini değerlendir
| Ölçüt | Başlangıç | İyi | Mükemmel |
|---|---|---|---|
| Performans | İndeks eklenmiş | Önce/sonra plan karşılaştırılmış | Ölçüm, plan ve yazma maliyeti birlikte değerlendirilmiş |
| Doğruluk | Rapor çalışıyor | Satır sayısı aynı | Adet ve tutar mutabakatı sıfır fark |
| Güvenlik | Görünüm var | Kişisel veri maskeli | Yetki matrisi, test ve geri alma planı hazır |