Sorunun amacı
"Bu sorgu yavaş, ne yaparsın?" sorusu ezber ölçmez. Mülakatı yapan kişi yönteme bakar: Önce soru mu soruyorsun, ölçüyor musun, kararın bedelini biliyor musun?
Yanıt iskeleti
- Netleştir: "Ne kadar yavaş, hedef ne, ne sıklıkla çalışıyor, tablo kaç satır, okuma ağırlıklı mı?"
- Ölç: "Planı alır, temel ölçümü yazarım: süre ve okunan sayfa."
- Darboğazı bul: "Büyük tablo taranıyor mu, tahmin ile gerçek ayrışıyor mu, geçici sıralama var mı, alt sorgu her satırda mı çalışıyor?"
- Yazımı düzelt: "Sütunu fonksiyondan çıkarır, gereksiz DISTINCT ve SELECT * kaldırırım."
- İndeksi tasarla: "Eşitlik, aralık, sıralama, sonra kapsama."
- Doğrula: "Sonuç aynı mı, sayı düştü mü, yazma bedeli ne?"
Sık sorulan kısa sorular
| Soru | Kısa yanıt |
|---|---|
| Clustered ve nonclustered farkı | Clustered satırların kendisini anahtar sırasında tutar, tabloda tek olur. Nonclustered ayrı yapıdır ve satıra işaret eder. |
| Kapsayan indeks | Sorgunun bütün sütunları indekste, tabloya gidilmez. |
| Sargable | İndeks aramasına uygun koşul. Sütun yalın kalır. |
| Index Scan ve Index Seek | Seek ilgili bölgeye gider, Scan indeksin tamamını okur. |
| Key Lookup neden pahalı | Bulunan her satır için tabloya ayrı gidilir. Çok satırda büyür. |
| Hash ve Nested Loop | Hash büyük sırasız girdiler için, Nested Loop az dış satır ve indeksli iç taraf için. |
| OFFSET neden yavaşlar | Atlanan satırlar yine hesaplanır. Keyset son anahtardan devam eder. |
| Parametre koklama | Plan ilk değere göre kurulup diğer değerlere de uygulanır. |
| Bölüm eleme | Bölüm sütunu süzülünce ilgisiz bölümler okunmaz. |
| Tahmin ve gerçek farkı | Bayat istatistik, fonksiyonlu koşul ya da çarpık veri belirtisi. |
Tuzaklar
- "EXISTS her zaman hızlıdır" deme. "Birçok motor aynı plana çevirebilir, bu sistemde ölçerim" de.
- "Her sütuna indeks" deme. Yazma bedelini anlat.
- "NOLOCK eklerim" deme. Kirli okumayı anlat.
- Sonucun aynı kaldığını doğrulamayı unutma. Bu cümle seni çoğu adaydan ayırır.
Motor burada SQLite olduğundan görevlerin planları SQLite planıdır. Mülakatta hangi motor sorulursa onun adlarıyla konuş.
Operasyon ve güvenlik soruları
| Soru | Kısa yanıt |
|---|---|
| Kodu değiştiremiyorum, sorgu yavaş | İstatistik ve indeks, sonra Query Store ile plan zorlama ya da ipucu. Hepsi geri alınabilir olmalı, takvime bağlanmalı. |
| En pahalı sorguları nasıl bulursun? | Sabitleri ayıklayıp gruplarım: query_hash ya da Query Store. Şikâyetin saat aralığına süzerim. |
| Önbellek ne zaman yanlış? | Bayat verinin bedeli yüksekse, çoğu istek ıskalıyorsa, sorgu hatalıysa. |
| SQL injection nasıl önlenir? | Parametreli sorgu, adlar için izin listesi, en az yetki. Süzme asıl savunma değildir. |
| Parola denemesini nasıl görürsün? | Adres başına farklı hesap, hesap başına deneme, başarısızlıktan sonra başarı. |
Ayrıntı SQL Server Operasyon ve Güvenlik yolunda.