..


Sponsorerede links

Optimering af T-SQL script i SQL Server

Artikel skrevet af Vincenzo Gaglio
Side 4 af 4

En første løsning er at bruge JOIN i forespørgslen direkte omskrivning som følger






 SELECT PC.LastName +''+ PC.FirstName [Kundens navn]



      



 , SC.CustomerType







 FRA SALG.Kunde SC







 LEFT OUTER JOIN JA Sales.Individual







 ON = SC.CustomerID SI.CustomerID







 LEFT OUTER JOIN Person.Contact PC







 ON = SI.ContactID PC.ContactID



I denne anden udgave jeg simpelthen brugt tabellerne i funktionen getNavn sætte dem i FROM-udtrykket. Jeg har endvidere erstattet funktionskald getNavn på listen over kolonnerne i SELECT-sætningen ved direkte at sammenkæde de to kolonner til Kontakt bordet.

Her er hvad de profiler viser udfører denne forespørgsel

Som du kan se ansigtet af talrige opfordringer fra den tidligere version af forespørgslen, den nye version er et enkelt opkald hvilket selvfølgelig betyder en stor besparelse i form af funktionsdygtighed.

Lad os nu se hvad der sker ved at konvertere den oprindelige skalarfunktion getNavn i en funktion, der returnerer en tabel i stedet (in-line tabel). Først skal du oprette funktionen og denominiamola GetNameTable






 CREATE FUNCTION GetNameTable (@ Kunde-int)







 ANGIVELSER TABEL







 AS

 





 (RETURN



  



 SELECT Efternavn + ',' + Fornavn [Kundens navn]



  



 FRA SALG.Kunde SC



  



 LEFT OUTER JOIN JA Sales.Individual



  



 ON = SC.CustomerID SI.CustomerID



  



 LEFT OUTER JOIN Person.Contact PC



  



 ON = SI.ContactID PC.ContactID

 

  



 WHERE Kunde = @ SC.CustomerID



 



 )



Som du kan se den forespørgsel, der trækker data er lig med, at den skalarfunktion getNavn, den eneste forskel er, at funktionen returnerer en tabel GetNameTable i stedet for en varchar værdi. For at bruge denne nye funktion han bruger er nødvendigt at bruge CROSS GÆLDER operatør som følger






 SELECT I. [Kundens navn]



      



 , SC.CustomerType







 FRA SALG.Kunde SC







 CROSS GÆLDER GetNameTable (SC.CustomerID) Den



I dette tilfælde er resultatet af følgende vil Profiler

Lad os tage et sidste eksempel på, hvordan man skriver den oprindelige forespørgsel mere effektivt. Denne gang vil vi skabe og bruge følgende udsigt






 CREATE VIEW View_GetName







 AS



  



 SELECT Efternavn + ',' + Fornavn [Kundens navn]



        



 , SC.CustomerID

 

  



 FRA SALG.Kunde SC



  



 DELTAG I Sales.Individual



  



 ON = SC.CustomerID SI.CustomerID



  



 JOIN Person.Contact PC



  



 ON = SI.ContactID PC.ContactID







 GO



Baseret på dette synspunkt kan vi skrive vores forespørgsel som følger






 V. SELECT [Kundens navn]

 

      



 , CustomerType







 FRA SALG.Kunde SC







 LEFT OUTER JOIN View_GetName V







 ON SC.CustomerID Kunde = R.



I dette tilfælde er resultatet af Profiler er lig med, at de to foregående eksempler. Disse tre eksempler kan sidestilles skønt de kan indeholde små forskelle i præstation. Den mest effektive metode er den CROSS JOIN resulterer i et lidt lavere CPU-forbrug (du kan se ud fra oplysningerne i de Profiler).

Disse eksempler har til formål at understrege, at brugen af ​​skalarfunktioner på listen over kolonner i en SELECT-sætning eller i en WHERE klausul er en ineffektiv praksis. De negative virkninger af denne praksis er direkte proportional med mængden af ​​data hentet fra de forespørgsler, der bruges. Når det bruges på denne måde, de skalarfunktioner opføre sig som en markør, der kaldes gentagne gange, og vejes ned for udviklingen af ​​vores anvisninger. Hvis altså, der anvendes i nogle af dine forespørgsler anses skalarfunktioner at omskrive det samme i en af ​​de foreslåede alternativ.

(Artiklen fortsætter nedenfor ...)

Dem, der ses i denne artikel er blot nogle af de mulige foranstaltninger for at forbedre ydelsen i vores T-SQL-forespørgsler og andre nyttige enheder vil blive drøftet i fremtidige artikler.

I den samme kategori ...
E-Learning
MS Access Kursus MS Access Kursus
Lær, hvordan du opretter og administrerer databaser nemt og hurtigt. Fra 29 €.
Kursus MySQL Kursus MySQL
Forvaltning af open source-database. Fra 39 €.
Kursus Database og SQL Kursus Database og SQL
Oprettelse og håndtering af relationelle databaser. Fra 39 €.
Sponsorerede links