..


Link-uri sponsorizate

Optimizarea performanţelor de T-SQL script în SQL Server

Articolul scris de Vincenzo Gaglio
Pagina 4 din 4

O primă soluţie este să folosiţi JOIN în interogare în mod direct, rescrierea după cum urmează






 SELECT PC.LastName +''+ PC.FirstName [Nume Client]



      



 , SC.CustomerType







 DIN Sales.Customer SC







 LEFT JOIN SECUNDAR DA Sales.Individual







 ON = SC.CustomerID SI.CustomerID







 LEFT JOIN SECUNDAR Person.Contact PC







 ON = SI.ContactID PC.ContactID



În această a doua versiune am folosit pur şi simplu în tabelele getName funcţia de punerea lor în clauza FROM. Am înlocuit, de asemenea, getName apel de funcţie pe lista de coloane în instrucţiunea SELECT prin concatenarea direct cele două coloane la tabel de contact.

Iată ce profiler prezinta de executare această interogare

Dupa cum puteti vedea fata de numeroase apeluri de la versiunea anterioară a interogării, noua versiune este un singur apel pe care, desigur, înseamnă o economisire mare în termeni de performanţă.

Acum sa vedem ce se întâmplă prin conversia versiunea originală getName funcţie scalară într-o funcţie care returnează un tabel în loc (tabelul inline). În primul rând, a crea funcţia şi denominiamola GetNameTable






 CREATE FUNCTION GetNameTable (@ CustomerID int)







 REVINE TABELUL







 AS

 





 (RETURN



  



 SELECT Nume + ',' + Prenume [Nume Client]



  



 DIN Sales.Customer SC



  



 LEFT JOIN SECUNDAR DA Sales.Individual



  



 ON = SC.CustomerID SI.CustomerID



  



 LEFT JOIN SECUNDAR Person.Contact PC



  



 ON = SI.ContactID PC.ContactID

 

  



 UNDE de client = @ SC.CustomerID



 



 )



După cum puteţi vedea interogarea care extrage date este egală cu cea a getName funcţie scalară, singura diferenţă este că funcţia returnează un GetNameTable tabel în loc de o valoare varchar. Pentru a utiliza această caracteristică nouă el foloseste este necesar să se utilizeze CROSS aplică operatorului, după cum urmează






 I. SELECT [Nume Client]



      



 , SC.CustomerType







 DIN Sales.Customer SC







 CROSS APLICA GetNameTable (SC.CustomerID)



În acest caz, rezultatul cu următorul text va Profiler

Sa luam un exemplu final de modul în care să scrie interogarea originală mai eficient. De data aceasta vom crea şi de a folosi ecranul următoarele






 CREATE VIEW View_GetName







 AS



  



 SELECT Nume + ',' + Prenume [Nume Client]



        



 , SC.CustomerID

 

  



 DIN Sales.Customer SC



  



 JOIN Sales.Individual



  



 ON = SC.CustomerID SI.CustomerID



  



 JOIN PC Person.Contact



  



 ON = SI.ContactID PC.ContactID







 GO



Bazat pe acest punct de vedere, putem scrie interogare noastre, după cum urmează






 V. SELECT [Nume Client]

 

      



 , CustomerType







 DIN Sales.Customer SC







 LEFT JOIN SECUNDAR View_GetName V







 ON SC.CustomerID de client = R.



În acest caz, rezultatul Profiler este egal cu cel din ultimele două exemple. Aceste trei exemple sunt echivalente, deşi prezintă mici diferenţe în performanţă. Abordarea cea mai eficientă este CROSS JOIN duce la o utilizare CPU uşor mai mică (se poate vedea din datele de Profiler).

Aceste exemple sunt menite să sublinieze faptul că utilizarea de funcţii scalare în lista de coloane într-o instrucţiune SELECT sau într-o clauza WHERE este o practică ineficientă. Efectele negative ale acestei practici este direct proportionala cu cantitatea de date extrase din interogările care sunt utilizate. Atunci când este utilizat în acest fel, funcţii scalare se comporte ca un cursor care este numit în mod repetat, şi apoi se cântăreşte în jos de dezvoltare a instrucţiunilor noastre. Dacă, prin urmare, utilizat în unele dintre întrebările dumneavoastră considerate funcţii scalare pentru a rescrie aceeaşi într-una din alternative propuse.

(Articolul continuă de mai jos ...)

Cele observate în acest articol sunt doar unele dintre măsurile posibile pentru a îmbunătăţi performanţele noastre T-SQL interogări şi alte dispozitive de utile vor fi discutate în articole viitoare.

În aceeaşi categorie ...
E-Learning
MS Access Curs MS Access Curs
Aflaţi cum să creaţi şi să gestionaţi baze de date uşor şi rapid. Discount -10% până la 06/01/2012.
Curs MySQL Curs MySQL
De gestionare a bazei de date open-source. -15% Reducere până la 06/01/2012.
Bază de date curs şi SQL Bază de date curs şi SQL
Crearea şi administrarea bazelor de date relaţionale. -15% Reducere până la 06/01/2012.
Link-uri sponsorizate