Raporlama yapmam gereken Fatura verilerini içeren bir üçüncü taraf veritabanım var. Miktar ve Tutar Alanları, "fatura" nın bir Alacak Dekontu veya gerçek Fatura olup olmadığına bakılmaksızın Olumlu sayılar olarak saklanır. "I" = Fatura, "R" = Kredi türünü içeren tek bir karakter alanı vardır.SQL Fatura Sorgu Performansı Kredileri negatif sayılara dönüştürme
1,4 milyon kayıtla eşdeğer bir raporda, bu verileri toplamalıyım, böylece Krediler toplam ve Faturaların toplamından çıkarılır ve raporda 8 farklı sütun için bunu yapmam gerekir (CurrentYear , ÖncekiYıl, vb.)
Sorunum, bunu başarmanın birçok farklı yolunun performansı.
En iyi performans şöyle denklemin içinde CASE deyimi kullanıyor görünüyor: Ben 8 farklı sütunlara yapmak zorunda beri
Case WHEN ARH.AccountingYear - 2 = @iCurrentYear THEN ARL.ShipQuantity * (CASE WHEN InvoiceType = 'R' THEN -1 ELSE 1 END) ELSE 0 END as PPY_INVOICED_QTY
Ama kod okunabilir akıllı, bu süper çirkin, performans iyidir , 16 saniyede tüm 1.4M kayıtlarına karşı çalışır. Bir Skaler UDF Kullanma
performansCase WHEN ARH.AccountingYear - 2 = @iCurrentYear THEN ARL.ShipQuantity * dbo.fn_GetMultiplier(ARH.InvoiceType) ELSE 0 END as PPY_INVOICED_QTY
neredeyse 5 dakika sürer öldürür. Yani bunu yapamazsın. Aklıma
Diğer seçenekler olacaktır: Görüntüleme
- Çoklu düzeyleri, daha sonra, bir Çarpan sütunu eklemek bundan SEÇ ve yeni sütun
- Oluştur kullanarak çarpma yapmak için yeni bir görünümü kullanmak 2 sütun ve 2 kayıt, R, -1 ve I, 1 içeren bir tablo ve InvoiceType'ı temel alarak buna katıl, ancak bu aşırı görünüyor.
Eksik olduğum başka fikirlerim veya bu tür şeyler için en iyi uygulama önerileri? Üçüncü taraf uygulaması tarafından kurulan depolanmış verileri değiştiremiyorum.
Şemayu değiştirip fatura türüne göre hesaplanmış bir sütun ekleyebilir misiniz? Daha okunabilir olmasını sağlar, ancak performansı da artırabilir. – Igor
Maalesef, üçüncü taraf tablolarını, destek sözleşmesini geçersiz kılmaksızın hiçbir şekilde değiştirmem mümkün değil. – Earthworm
Bu durumda, bir veya daha fazla Görünüm muhtemelen en iyi bahistir. Dahil ettiğiniz şeye bağlı olarak, size bir [İndeksli görünüm] (https://msdn.microsoft.com/en-us/library/ms191432 (v = sql.110) .aspx) sağlayabilirsiniz. hafif performans artışı. – Igor