..
İ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ü.
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.
| |
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
Açık kaynak veritabanı yönetimi. 39 € dan başlayan fiyatlarla. |
| |
Ders Veritabanı ve SQL
Ilişkisel veritabanı oluşturma ve yönetme. 39 € dan başlayan fiyatlarla. |