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

Bitirme projesi (DBA): yavaş raporu hızlandır ve veritabanını güvenceye al

Sorgu analizi, indeks tasarımı, SARGable yeniden yazım, salt okunur rapor katmanı.

Uygulamada aç, 8 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'ı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.

SQL türleriİndeks adımları BigQuery dışındaki tüm SQL türlerinde yapılabilir; BigQuery'de karşılığı bölümleme ve kümelemedir.

Derinleş: değişikliği güvenle üretime almak

Brif: BT müdürü ve iç denetim“Gün sonu raporu sabah ekibini bekletiyor ve denetim raporunda analistlerin ham müşteri verisine eriştiği yazıyor. Değişiklik kurulunda onay isteyeceksin: ne değişiyor, sonuç aynı kalıyor mu, geri alma planı ne?”

Çalışma planı

  1. Ö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.
  2. 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).
  3. İndeksi seçerken seçiciliğe bak. 8 farklı değeri olan txn_type tek başına zayıf bir indekstir; tarih ya da hesap sütunu çok daha seçicidir (Ek görev 2).
  4. Geri alma planı. DROP INDEX ve DROP VIEW komutlarını değişiklik notuna önceden yaz.

Kontrol listesi

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

Yönetici özeti örneğiGün sonu raporu tarih filtresi SARGable yazılarak ve 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çütBaşlangıçİyiMükemmel
Performansİndeks eklenmişÖnce/sonra plan karşılaştırılmışÖlçüm, plan ve yazma maliyeti birlikte değerlendirilmiş
DoğrulukRapor çalışıyorSatır sayısı aynıAdet ve tutar mutabakatı sıfır fark
GüvenlikGörünüm varKişisel veri maskeliYetki matrisi, test ve geri alma planı hazır
Alıştırmalara geç (8)