..


Sponsede Lenker

Optimalisere ytelsen til T-SQL skript i SQL Server

Artikkel skrevet av Vincenzo Gaglio
Side 4 av 4

En første løsning er å bruke BLI i spørringen direkte omskriving som følger






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



      



 , SC.CustomerType







 FRA Sales.Customer SC







 LEFT Ytre BLI JA Sales.Individual







 ON = SC.CustomerID SI.CustomerID







 LEFT Ytre BLI Person.Contact PC







 ON = SI.ContactID PC.ContactID



I denne andre versjonen bare jeg brukte tabellene i funksjonen GetName sette dem i FROM klausulen. Jeg har også erstattet funksjonen kaller GetName på listen over kolonnene i SELECT-setningen ved direkte sette sammen de to kolonnene til Contact bordet.

Her er hva den profiler viser utføre dette søket

Som du kan se ansiktet til en rekke samtaler fra den forrige versjonen av spørringen, er den nye versjonen en enkelt anrop som selvfølgelig betyr en stor besparelse i form av ytelse.

La oss nå se hva som skjer ved å konvertere den opprinnelige skalar funksjon GetName i en funksjon som returnerer en tabell i stedet (inline tabell). Først oppretter funksjonen og denominiamola GetNameTable






 CREATE FUNCTION GetNameTable (@ CustomerID int)







 RETURNS TABELL







 AS

 





 (RETURN



  



 SELECT Etternavn + ',' + Fornavn [Customer Name]



  



 FRA Sales.Customer SC



  



 LEFT Ytre BLI JA Sales.Individual



  



 ON = SC.CustomerID SI.CustomerID



  



 LEFT Ytre BLI Person.Contact PC



  



 ON = SI.ContactID PC.ContactID

 

  



 HVOR CustomerID = @ SC.CustomerID



 



 )



Som du kan se spørringen som trekker ut dataene er lik det skalar funksjon GetName, den eneste forskjellen er at funksjonen returnerer en tabell GetNameTable stedet for en VARCHAR verdi. For å bruke denne nye funksjonen han bruker er nødvendig å bruke CROSS GJELDER operatør som følger






 SELECT I. [Customer Name]



      



 , SC.CustomerType







 FRA Sales.Customer SC







 CROSS GJELDER GetNameTable (SC.CustomerID) Den



I dette tilfellet er resultatet av det følgende vil Profiler

La oss ta et siste eksempel på hvordan å skrive den opprinnelige spørringen mer effektivt. Denne gangen vil vi opprette og bruke følgende syn






 CREATE VIEW View_GetName







 AS



  



 SELECT Etternavn + ',' + Fornavn [Customer Name]



        



 , SC.CustomerID

 

  



 FRA Sales.Customer SC



  



 BLI MED PÅ Sales.Individual



  



 ON = SC.CustomerID SI.CustomerID



  



 BLI Person.Contact PC



  



 ON = SI.ContactID PC.ContactID







 GO



Basert på dette synet kan vi skrive vår spørring som følger






 V. SELECT [Customer Name]

 

      



 , CustomerType







 FRA Sales.Customer SC







 LEFT Ytre BLI View_GetName V







 PÅ SC.CustomerID CustomerID = R.



I dette tilfellet er resultatet av Profiler er lik som for de to foregående eksemplene. Disse tre eksemplene er likeverdige selv presenterer små forskjeller i ytelse. Den mest effektive tilnærmingen er CROSS BLI resulterer i en noe lavere CPU-bruk (du kan se fra dataene fra Profiler).

Disse eksemplene er ment å markere at bruk av skalare funksjoner i listen over kolonner i en SELECT-setning eller i et WHERE-klausulen er en ineffektiv praksis. De negative effektene av denne praksisen er direkte proporsjonal med mengden av data hentet fra spørringer som brukes. Når den brukes på denne måten, det skalare funksjoner oppføre seg som en markør som kalles gjentatte ganger, og deretter tynge utviklingen av våre instruksjoner. Hvis derfor brukt i noen av dine spørsmål anses skalare funksjoner å skrive det samme i en av de foreslåtte alternativ.

(Artikkelen fortsetter nedenfor ...)

De som har sett i denne artikkelen er bare noen av de mulige tiltak for å forbedre ytelsen av vår T-SQL-spørringer og andre nyttige enheter vil bli diskutert i fremtidige artikler.

I samme kategori ...
E-Learning
MS Access Course MS Access Course
Lær hvordan å opprette og administrere databaser enkelt og raskt. Rabatt -10% frem til 06/01/2012.
Kurs MySQL Kurs MySQL
Forvaltning av open-source database. -15% Rabatt frem til 06/01/2012.
Kurs Database og SQL Kurs Database og SQL
Opprette og administrere relasjonsdatabaser. -15% Rabatt frem til 06/01/2012.
Sponsede Lenker