..


Sponsor Bağlantılar

SQL Server T-SQL komut dosyası performansını optimize

Vincenzo Gaglio tarafından yazılmış makale
Toplam 4 sayfada 4

İlk çözüm aşağıdaki şekilde yeniden doğrudan sorguda JOIN kullanmak için






 SEÇ PC.LastName +''+ PC.FirstName [Müşteri Adı]



      



 , SC.CustomerType







 Sales.Customer SC DAN







 DIŞ VAR Sales.Individual LEFT JOIN







 = SC.CustomerID SI.CustomerID AÇIK







 SOL DIŞ JOIN Person.Contact PC







 = SI.ContactID PC.ContactID AÇIK



Bu ikinci sürümünde ben sadece FROM yan tümcesinde koyarak işlev getName tabloları kullanılır. Ben de doğrudan İletişim tabloya iki sütun birleştirerek SELECT deyimi sütun listesinde işlev çağrısı getName yerini aldı.

İşte profiler bu sorguyu çalıştırmadan gösterir ne

Sorgunun önceki sürümünden birçok çağrı karşısında gördüğünüz gibi yeni sürüm elbette performans açısından büyük bir tasarruf anlamına gelen tek bir çağrıdır.

Şimdi yerine bir tablo döndürür (satır içi tablo) bir işlevi orijinal skaler fonksiyon getName dönüştürerek ne olduğunu görelim. İlk olarak, işlev ve denominiamola GetNameTable oluşturmak






 FONKSİYON GetNameTable (@ MüşteriNo int) CREATE







 RETURNS TABLO







 AS

 





 (İADE



  



 SEÇ Soyadı + ',' + Ad [Müşteri Adı]



  



 Sales.Customer SC DAN



  



 DIŞ VAR Sales.Individual LEFT JOIN



  



 = SC.CustomerID SI.CustomerID AÇIK



  



 SOL DIŞ JOIN Person.Contact PC



  



 = SI.ContactID PC.ContactID AÇIK

 

  



 MüşteriNo = @ SC.CustomerID



 



 )



Veri skaler fonksiyon getName eşit olan özler sorgu Görüldüğü gibi, tek fark fonksiyon varchar değeri yerine bir tablo GetNameTable döndürmesidir. Diye kullanan bu yeni özelliği kullanmak için HAÇ aşağıdaki gibi operatör GEÇERLİ kullanmak gereklidir






 I. [Müşteri Adı] SELECT



      



 , SC.CustomerType







 Sales.Customer SC DAN







 GetNameTable (SC.CustomerID) GEÇERLİ ÇAPRAZ



Bu durumda aşağıdaki sonucu Profiler olur

Kullanıcı daha verimli özgün sorgu yazmak için nasıl bir son örnek verelim. Bu sefer biz şu görünümü oluşturmak ve kullanacak






 View_GetName CREATE VIEW







 AS



  



 SEÇ Soyadı + ',' + Ad [Müşteri Adı]



        



 , SC.CustomerID

 

  



 Sales.Customer SC DAN



  



 Sales.Individual JOIN



  



 = SC.CustomerID SI.CustomerID AÇIK



  



 Person.Contact PC JOIN



  



 = SI.ContactID PC.ContactID AÇIK







 GO



Bu görüşe dayanarak bizim sorgu aşağıdaki gibi yazabilirsiniz






 V. SELECT [Müşteri Adı]

 

      



 , CustomerType







 Sales.Customer SC DAN







 DIŞ JOIN View_GetName V SOL







 SC.CustomerID MüşteriNo = R AÇIK



Bu durumda Profiler sonucu önceki iki örnek bu eşittir. Performans küçük farklılıklar barındırmasına rağmen bu üç örnek eşdeğerdir. En verimli yaklaşım HAÇ biraz daha düşük CPU kullanımı (Eğer Profiler verilerini görebilirsiniz) neden JOIN olduğunu.

Bu örnekler vurgulamak amaçlanmıştır bir deyim ya da madde verimsiz bir uygulamadır WHERE bir sütun listesinde skaler fonksiyonların kullanın. Bu uygulamanın olumsuz etkileri kullanılan sorguları elde edilen veri miktarı ile doğru orantılıdır. Bu şekilde kullanıldığında, skaler fonksiyonlar tekrar tekrar çağrılan bir imleç gibi davranır, sonra bizim talimatlar gelişimi aşağı tartın. Bu nedenle, sorguları bazı kullanılan, eğer önerilen alternatif birinde aynı yeniden yazmak için scalar işlevler düşündü.

(Yazı aşağıda devam ediyor ...)

Bu makalede görülen bu bizim T-SQL sorguları ve diğer yararlı cihazların performansını artırmak için olası önlemlerin bir sonraki makalelerde ele alınacak sadece bulunmaktadır.

Aynı Kategoride ...
E-Öğrenme
MS Access Kursu MS Access Kursu
Kolay ve hızlı bir veritabanı oluşturmak ve yönetmek için nasıl kullanacağınızı öğrenin. 29 € dan başlayan fiyatlarla.
Ders MySQL Ders MySQL
Açık kaynak veritabanı yönetimi. 39 € dan başlayan fiyatlarla.
Ders Veritabanı ve SQL Ders Veritabanı ve SQL
Ilişkisel veritabanı oluşturma ve yönetme. 39 € dan başlayan fiyatlarla.
Sponsor Bağlantılar