..


Rėmėjų nuorodos

Optimizavimas T-SQL skripto vykdymo SQL Server

Straipsnį raštu pateikė Vincenzo Gaglio
Puslapis 4 iš 4

Pirmasis sprendimas yra naudoti prisijungti prie užklausą tiesiogiai perrašyti taip






 PASIRINKITE PC.LastName +''+ PC.FirstName [Kliento vardas]



      



 , SC.CustomerType







 IŠ Sales.Customer AB







 KAIRĖN IŠORINĖS PRISIJUNK TAIP Sales.Individual







 ON = SC.CustomerID SI.CustomerID







 KAIRĖN IŠORINĖS PRISIJUNK Person.Contact kompiuterio







 ON = SI.ContactID PC.ContactID



Šiuo antroji versija aš tiesiog naudojamas lenteles funkcija getName išleisti juos į IŠ sąlyga. Aš taip pat pakeitė funkcija skambinti getName dėl stulpelius SELECT sąrašą tiesiogiai Sujungę du stulpelius Kontaktai stalo.

Štai ką Profiler rodo, vykdant šią užklausą

Kaip matote daug skambučių iš ankstesnės versijos užklausą veidą, nauja versija yra vieno skambučio, kuri, žinoma, reiškia didelį taupymo atlikimo terminai.

Dabar pažiūrėkime, kas atsitinka, keičiant originalios skaliarinė funkcija getName į funkciją, kuri grąžina lentelės vietoj (inline lentelę). Pirma, sukurti funkciją ir denominiamola GetNameTable






 Sukurti funkciją GetNameTable (@ Kliento_ID int)







 Grąžina LENTELĖ







 AS

 





 (Return



  



 SELECT Pavardė + "," + Vardas [Kliento pavadinimas]



  



 IŠ Sales.Customer AB



  



 KAIRĖN IŠORINĖS PRISIJUNK TAIP Sales.Individual



  



 ON = SC.CustomerID SI.CustomerID



  



 KAIRĖN IŠORINĖS PRISIJUNK Person.Contact kompiuterio



  



 ON = SI.ContactID PC.ContactID

 

  



 KUR Kliento_ID = @ SC.CustomerID



 



 )



Kaip matote užklausą, ekstraktai duomenys yra lygi tai skaliarinė funkcija getName, vienintelis skirtumas yra tas, kad funkcija grąžina stalo GetNameTable vietoj VARCHAR vertę. Norėdami naudotis šia nauja funkcija jis naudoja būtina naudoti CROSS TAIKOMI operatorius taip






 PASIRINKITE I [Kliento vardas]



      



 , SC.CustomerType







 IŠ Sales.Customer AB







 KRYŽIAUS TAIKOMI GetNameTable (SC.CustomerID)



Šiuo atveju toks rezultatas bus Profiler

Paimkime galutinis pavyzdys kaip rašyti originalo užklausą efektyviau. Šį kartą mes sukurti ir naudoti šiuos vaizdo






 CREATE VIEW View_GetName







 AS



  



 SELECT Pavardė + "," + Vardas [Kliento pavadinimas]



        



 , SC.CustomerID

 

  



 IŠ Sales.Customer AB



  



 PRISIJUNK Sales.Individual



  



 ON = SC.CustomerID SI.CustomerID



  



 PRISIJUNK Person.Contact kompiuterio



  



 ON = SI.ContactID PC.ContactID







 GO



Remiantis šiuo požiūriu, mes galime parašyti savo užklausą taip






 V. SELECT [Kliento pavadinimas]

 

      



 , CustomerType







 IŠ Sales.Customer AB







 KAIRĖN IŠORINĖS PRISIJUNK View_GetName V







 APIE SC.CustomerID Kliento_ID = R.



Šiuo atveju Profiler rezultatas yra lygus, kad per praėjusius dvejus pavyzdžiai. Šie trys pavyzdžiai yra lygiaverčiai, nors pateikiant nedidelių skirtumų efektyvumą. Efektyviausias metodas yra CROSS JOIN todėl šiek tiek mažesnis procesoriaus naudojimas (galima pamatyti nuo Profiler duomenis).

Šie pavyzdžiai yra skirti pabrėžti, kad skaliarinis funkcijas naudoti stulpelius SELECT arba WHERE yra neveiksminga praktikoje, sąrašas. Neigiamą šios praktikos yra tiesiogiai proporcingas duomenų, paimtų iš užklausų, kurie yra naudojami sumą. Kai naudojamas tokiu būdu, skaliarinis funkcijas elgiasi kaip žymeklis, kuris yra vadinamas kelis kartus, ir tada prislėgti ir mūsų instrukcijose. Todėl, jei naudojami kai kurie iš jūsų užklausose, skaliarinis funkcijas perrašyti tą patį vienoje iš siūlomų alternatyvų.

(Straipsnis tęsia toliau ...)

Tie matyti šiame straipsnyje, yra tik keletas galimų priemonių, siekiant pagerinti mūsų T-SQL užklausų ir kitų naudingų prietaisų veikimo bus aptarti ateityje straipsniai.

Tos pačios kategorijos ...
E-mokymasis
MS Access kursai MS Access kursai
Sužinokite, kaip kurti ir valdyti duomenų bazių lengvai ir greitai. Nuolaida -10% iki 2012/06/01.
Žinoma, MySQL Žinoma, MySQL
Valdymas atviro kodo duomenų bazėje. -15% Nuolaida iki 2012/06/01.
Žinoma, duomenų bazių ir SQL Žinoma, duomenų bazių ir SQL
Kurti ir administruoti reliacinėse duomenų bazėse. -15% Nuolaida iki 2012/06/01.
Rėmėjų nuorodos