COMPUTER ENGINEER

Örneklere git
Blog
SQL Server / T-SQL6 dk çalışma
50/ 65

İndeksler ve performans

İstatistik, cardinality ve join algoritmaları

Optimizer’ın veri hakkındaki bilgisi sınırlıdır.

AnlaÖrneği inceleKendin uygula

Kavramı anlayalım

İstatistikler veri dağılımını özetler; histogram ve density bilgileri cardinality tahminine katkı verir. Eski istatistik, örnekleme, korelasyon veya parametre dağılımı yanlış tahmine yol açabilir. Tahmin hatası join seçimini, memory grant’i ve paralelliği etkileyebilir.

Nested loops küçük dış küme ve verimli iç erişimde uygundur. Hash join büyük eşitlik birleştirmelerinde yararlı olabilir; yeterli bellek yoksa spill oluşabilir. Merge join uygun sıralı girdilerle çalışır; sıralama maliyeti ayrıca hesaplanır. Her algoritma bağlama göre doğrudur. Hint kullanmadan önce veri, indeks, istatistik ve sorgu mantığını düzelt. Üretimde toplu UPDATE STATISTICS işlemini ölçmeden başlatma.

NERESİNDE KULLANIRSIN?

Tahmin hatasının plan kararlarını nasıl etkilediğini anlamak için.

SIK YAPILAN HATA

Hash join’i veya scan’i kategorik olarak kötülemek.

01 / UYGULAMA

Aynı konu. Üç farklı derinlik.

T-SQL / SQL Server 2019+
SELECT name, auto_created, user_created FROM sys.stats WHERE object_id = OBJECT_ID(N'lab.SalesOrder');

Mevcut istatistikleri listeler.

Bu sayfa SQL çalıştırmaz. Örnekleri indirilebilir SqlStudioLab veritabanında, SSMS’de uygula. Geçici tablo örneklerini yeniden çalıştırırken yalnız ilgili #tabloyu temizle. VIEW, procedure ve function örnekleri lab’da kalıcı nesne oluşturur; üretim bağlantısı kullanma.

02 / SIRA SENDE

Önce kendin dene.

Product için istatistiklerin son güncellemesini incele.

Çözümü ve açıklamasını göster
Açıklamalı çözüm
SELECT s.name, p.last_updated FROM sys.stats AS s OUTER APPLY sys.dm_db_stats_properties(s.object_id, s.stats_id) AS p WHERE s.object_id = OBJECT_ID(N'lab.Product');

NULL bilgi, henüz oluşmamış istatistik veya metadata erişimiyle ilişkili olabilir.