..


Sponsored Links

Die Optimierung der Leistung von T-SQL-Skript in SQL Server

Artikel von Vincenzo Gaglio geschrieben
Seite 4 von 4

Eine erste Lösung ist die Verwendung von JOIN in der Abfrage direkt, Umschreiben wie folgt






 SELECT PC.LastName +''+ PC.FirstName [Customer Name]



      



 , SC.CustomerType







 VON Sales.Customer SC







 LEFT OUTER JOIN YES Sales.Individual







 ON = SC.CustomerID SI.CustomerID







 LEFT OUTER JOIN Person.Contact PC







 ON = SI.ContactID PC.ContactID



In dieser zweiten Version habe ich einfach die Tabellen in der Funktion GetName man sie in der FROM-Klausel. Habe ich auch die Funktion aufrufen GetName auf die Liste der Spalten in der SELECT-Anweisung durch die direkte Verkettung der beiden Spalten der Tabelle Contact.

Hier ist, was der Profiler diese Abfrage ausführt, zeigt

Wie Sie trotz zahlreicher Anrufe aus der vorherigen Version der Abfrage sehen kann, ist die neue Version einen einzigen Anruf was natürlich bedeutet eine große Einsparung in Bezug auf Leistung.

Nun wollen wir sehen, was passiert, durch die Umwandlung der ursprünglichen Skalarfunktion GetName in eine Funktion, die eine Tabelle zurückgibt statt (inline Tabelle). Erstellen Sie zunächst die Funktion und denominiamola GetNameTable






 CREATE FUNCTION GetNameTable (@ CustomerID int)







 RETURNS TABLE







 AS

 





 (RETURN



  



 SELECT LastName + ',' + Vorname [Customer Name]



  



 VON Sales.Customer SC



  



 LEFT OUTER JOIN YES Sales.Individual



  



 ON = SC.CustomerID SI.CustomerID



  



 LEFT OUTER JOIN Person.Contact PC



  



 ON = SI.ContactID PC.ContactID

 

  



 WHERE CustomerID = @ SC.CustomerID



 



 )



Wie Sie die Abfrage, die Daten gleich, dass der skalaren Funktion GetName Auszüge sehen können, ist der einzige Unterschied, dass die Funktion eine Tabelle GetNameTable kehrt anstelle eines varchar-Wert. Um diese neue Funktion nutzt er ist notwendig, um die CROSS APPLY-Operator wie folgt






 SELECT I. [Name des Kunden]



      



 , SC.CustomerType







 VON Sales.Customer SC







 CROSS APPLY GetNameTable (SC.CustomerID) Die



In diesem Fall ist das Ergebnis der folgenden wird Profiler

Nehmen wir ein letztes Beispiel, wie die ursprüngliche Anfrage effizienter zu schreiben. Dieses Mal werden wir erstellen und verwenden Sie die folgende Ansicht






 CREATE VIEW View_GetName







 AS



  



 SELECT LastName + ',' + Vorname [Customer Name]



        



 , SC.CustomerID

 

  



 VON Sales.Customer SC



  



 JOIN THE Sales.Individual



  



 ON = SC.CustomerID SI.CustomerID



  



 JOIN Person.Contact PC



  



 ON = SI.ContactID PC.ContactID







 GO



Basierend auf dieser Ansicht können wir schreiben unsere Anfrage wie folgt






 V. SELECT [Name des Kunden]

 

      



 , CustomerType







 VON Sales.Customer SC







 LEFT OUTER JOIN View_GetName V







 ON SC.CustomerID CustomerID = R.



In diesem Fall ist das Ergebnis der Profiler ist gleich dem des vorhergehenden zwei Beispiele. Diese drei Beispiele sind gleichwertig, obwohl präsentiert kleine Unterschiede in der Leistung. Der effizienteste Ansatz ist die CROSS JOIN was zu einem etwas geringeren CPU-Auslastung (Sie können aus den Daten der Profiler zu sehen).

Diese Beispiele sollen aufzeigen, dass die Verwendung von skalaren Funktionen in der Liste der Spalten in einer SELECT-Anweisung oder in einer WHERE-Klausel ist eine ineffiziente Praxis. Die negativen Auswirkungen dieser Praxis ist direkt proportional zur Menge der Daten aus den Abfragen, die verwendet werden extrahiert. Wenn in dieser Weise verwendet, verhalten sich die skalare Funktionen wie ein Cursor, der immer wieder genannt wird, und dann beschweren die Entwicklung unserer Anleitung. Wenn also in einigen Ihrer Anfragen genutzt als skalare Funktionen, um das gleiche in einer der vorgeschlagenen Alternative umzuschreiben.

(Der Artikel fährt fort unten ...)

Die in diesem Artikel zu sehen sind nur einige der möglichen Maßnahmen, um die Leistung unserer T-SQL-Abfragen und andere nützliche Geräte zu verbessern, in zukünftigen Artikeln diskutiert werden.

In der selben Kategorie ...
E-Learning
MS Access Course MS Access Course
Erfahren Sie, wie das Erstellen und Verwalten von Datenbanken einfach und schnell. Rabatt -10% bis 2012.06.01.
Course MySQL Course MySQL
Management von Open-Source-Datenbank. -15% Rabatt bis 2012.06.01.
Course-Datenbank und SQL Course-Datenbank und SQL
Erstellen und Verwalten von relationalen Datenbanken. -15% Rabatt bis 2012.06.01.
Sponsored Links