..


Gesponsorde links

Optimaliseren van de prestaties van T-SQL script in SQL Server

Artikel geschreven door Vincenzo Gaglio
Pagina 4 van 4

Een eerste oplossing is het gebruik van direct JOIN in de query, herschrijven als volgt






 SELECT PC.LastName +''+ PC.FirstName [klantnaam]



      



 , SC.CustomerType







 VAN Sales.Customer SC







 LEFT OUTER JOIN JA Sales.Individual







 ON = SC.CustomerID SI.CustomerID







 LEFT OUTER JOIN Person.Contact PC







 ON = SI.ContactID PC.ContactID



In deze tweede versie ik gewoon de tabellen gebruikt worden in de functie getName ze in de FROM-component. Ik heb ook vervangen door de functie-aanroep getName op de lijst van kolommen in de SELECT-instructie door rechtstreeks het samenvoegen van de twee kolommen aan de Contact tafel.

Hier is wat de profiler toont het uitvoeren van deze query

Zoals je kunt zien het gezicht van de vele verzoeken van de vorige versie van de query, de nieuwe versie is een gesprek wat natuurlijk betekent een grote besparing in termen van prestaties.

Laten we nu eens zien wat er gebeurt door het omzetten van de oorspronkelijke scalaire functie getName in een functie die een tabel terug in plaats daarvan (inline tabel). Maak eerst de functie en denominiamola GetNameTable






 CREATE FUNCTION GetNameTable (@ KlantId int)







 RENDEMENTEN TAFEL







 AS

 





 (RETURN



  



 SELECT Achternaam + ',' + Voornaam [klantnaam]



  



 VAN Sales.Customer SC



  



 LEFT OUTER JOIN JA Sales.Individual



  



 ON = SC.CustomerID SI.CustomerID



  



 LEFT OUTER JOIN Person.Contact PC



  



 ON = SI.ContactID PC.ContactID

 

  



 WHERE KlantId = @ SC.CustomerID



 



 )



Zoals je kunt zien dat de query haalt de gegevens is gelijk aan die van de scalaire functie getName, het enige verschil is dat de functie een tafel GetNameTable plaats rendement van een varchar waarde. Voor het gebruik van deze nieuwe functie die hij gebruikt is het noodzakelijk het gebruik van de CROSS operator als volgt toegepast






 SELECT I. [klantnaam]



      



 , SC.CustomerType







 VAN Sales.Customer SC







 CROSS VAN TOEPASSING GetNameTable (SC.CustomerID) De



In dit geval is het resultaat van de volgende zal Profiler

Laten we eens een laatste voorbeeld van hoe de oorspronkelijke query schrijven efficiënter. Deze keer zullen we creëren en gebruik de volgende te bekijken






 CREATE VIEW View_GetName







 AS



  



 SELECT Achternaam + ',' + Voornaam [klantnaam]



        



 , SC.CustomerID

 

  



 VAN Sales.Customer SC



  



 DOE MEE AAN DE Sales.Individual



  



 ON = SC.CustomerID SI.CustomerID



  



 JOIN Person.Contact PC



  



 ON = SI.ContactID PC.ContactID







 GO



Op basis van deze visie kunnen we schrijven onze query als volgt






 V. SELECT [klantnaam]

 

      



 , CustomerType







 VAN Sales.Customer SC







 LEFT OUTER JOIN View_GetName V







 ON SC.CustomerID KlantId = R.



In dit geval is het resultaat van de Profiler is gelijk aan die van de vorige twee voorbeelden. Deze drie voorbeelden zijn gelijkwaardig, maar de presentatie van kleine verschillen in prestaties. De meest efficiënte aanpak is het CROSS JOIN resulteert in een iets lager CPU-gebruik (je kunt zien op de gegevens van de Profiler).

Deze voorbeelden zijn bedoeld om te benadrukken dat het gebruik van scalaire functies in de lijst van kolommen in een SELECT-instructie of in een WHERE clausule is een inefficiënte praktijk. De negatieve gevolgen van deze praktijk is recht evenredig met de hoeveelheid gegevens die uit de query's die worden gebruikt. Wanneer op deze manier gebruikt, de scalaire functies zich gedragen als een cursor die herhaaldelijk wordt genoemd, en weeg het vervolgens op de ontwikkeling van onze instructies. Wanneer dus, gebruikt in een aantal van uw vragen als scalaire functies op hetzelfde herschrijven in een van de voorgestelde alternatief.

(Het artikel gaat verder hieronder ...)

Die werden gezien in dit artikel zijn slechts enkele van de mogelijke maatregelen om de prestaties van onze T-SQL-query's en andere nuttige apparaten te verbeteren zal worden besproken in toekomstige artikelen.

In dezelfde categorie ...
E-Learning
MS Access Cursus MS Access Cursus
Leer hoe het maken en beheren van databanken gemakkelijk en snel. Korting -10% tot 06/01/2012.
Cursus MySQL Cursus MySQL
Beheer van de open source database. -15% Korting tot 06/01/2012.
Cursus Database en SQL Cursus Database en SQL
Het creëren en beheren van relationele databases. -15% Korting tot 06/01/2012.
Gesponsorde links