..
On-line kursi
  • Sekot mums par Facebook
  • Sekot mums par čivināt
  • Sekot mums par + Google
  • Sekot mums, izmantojot RSS
  • Seko mums ar jūsu viedtālrunis

Optimizējot T-SQL skriptu sniegumu SQL Server

Raksts raksta Vincenzo Gaglio
Gada 4 4 lapa

1. risinājums ir izmantot JOIN tieši vaicājumā, pārrakstot to šādi



 SELECT PC.LastName + ',' + PC.FirstName [Klienta vārds]

      

 , SC.CustomerType



 NO Sales.Customer SC



 KREISAIS ĀRĒJAIS JOIN JĀ Sales.Individual



 PAR = SC.CustomerID SI.CustomerID



 KREISAIS ĀRĒJAIS JOIN Person.Contact PC



 PAR = SI.ContactID PC.ContactID

Šajā otrajā versijā es vienkārši izmantoja tabulas funkciju GetName ieskaitot tos FROM klauzulu. Es arī aizstāja funkciju zvanu GetName uz sarakstu kolonnām SELECT ko tieši konkatenācijas divas kolonnas iesaistītos Contact tabulā.

Lūk Profiler liecina paraksta šo vaicājumu

Kā jūs varat redzēt priekšā neskaitāmus zvanus no iepriekšējās versijas vaicājuma, jaunā versija ir viens zvans, ka, protams, nozīmē lielu ietaupījumu attiecībā uz kvalitāti.

Paskatīsimies, kas notiek tagad pārvēršot sākotnējo skalāro funkciju GetName ar funkciju, kas atgriež tabulu vietā (inline tabula). Pirmkārt, izveidot funkciju un denominiamola GetNameTable



 CREATE FUNKCIJU GetNameTable (@ Klienta int)



 ATGRIEŠANĀS TABULA



 AS
 


 ATGRIEZTIES (

  

 SELECT Uzvārds + ',' + Vārds [Klienta vārds]

  

 NO Sales.Customer SC

  

 KREISAIS ĀRĒJAIS JOIN JĀ Sales.Individual

  

 PAR = SC.CustomerID SI.CustomerID

  

 KREISAIS ĀRĒJAIS JOIN Person.Contact PC

  

 PAR = SI.ContactID PC.ContactID
 
  

 SC.CustomerID KUR Klienta = @

 

 )

Kā jūs varat redzēt vaicājumu, kas uzņem dati ir vienāds ar paša skalārā funkcija GetName, vienīgā atšķirība ir tā, ka funkcija atgriež GetNameTable tabulu nevis varchar vērtības. Lai izmantotu šo jauno funkciju, jums ir utilizzario lietot CROSS PIETEIKTIES operatora šādi



 SELECT I. [Klienta vārds]

      

 , SC.CustomerType



 NO Sales.Customer SC



 CROSS PIETEIKTIES GetNameTable panta SC.CustomerID) The

Arī šajā gadījumā no Profiler rezultāts būs šādi

Mēs galīgo piemēru kā rakstīt sākotnējo vaicājumu efektīvāk. Šoreiz mēs radīt un izmantot šādu skatu



 CREATE VIEW View_GetName



 AS

  

 SELECT Uzvārds + ',' + Vārds [Klienta vārds]

        

 , SC.CustomerID
 
  

 NO Sales.Customer SC

  

 JOIN Sales.Individual

  

 PAR = SC.CustomerID SI.CustomerID

  

 JOIN Person.Contact PC

  

 PAR = SI.ContactID PC.ContactID



 GO

Balstoties uz šo mērķi mēs varam rakstīt mūsu vaicājums šādi



 V. SELECT [Klienta vārds]
 
      

 , CustomerType



 NO Sales.Customer SC



 LEFT ĀRĒJAIS JOIN View_GetName V



 PAR = SC.CustomerID V.CustomerID

Arī šajā gadījumā no Profiler rezultāts būs vienāds ar diviem iepriekšējiem piemēriem. Šie trīs piemēri ir līdzvērtīgi, neskatoties uz to mazo atšķirību rādītājus. Efektīvāka pieeja ir, ka CROSS JOIN, kas nosaka nedaudz zemāku izmantot CPU (jūs varat redzēt no šīs Profiler datiem).

Šie piemēri ir paredzēts uzsvērt, ka no skalārā funkciju sarakstā kolonnu SELECT vai WHERE klauzulas izmantošana ir neefektīva prakse. Negatīvās sekas šīs prakses ir tieši proporcionāls datu daudzumam, kas iegūti no vaicājumiem, kas izmanto. Ja to izmanto šādā veidā skalārā funkcijas uzvesties kā kursors, kas tiek saukta vairākkārt un tāpēc tas sver uz leju apstrādi mūsu norādījumiem. Ja, tāpēc, izmanto kādu no jūsu jautājumiem jāpārraksta skalārs funkcijas jāizskata tādā pašā veidā alternatīva ieteikto.

(Raksts turpina tālāk ...)

Tām, kas novērotas šajā rakstā ir tikai daži no iespējamiem pasākumiem, lai uzlabotu sniegumu mūsu T-SQL vaicājumi un citiem noderīgus padomus segs nākamajos pantos.

Kursi
Kurss MS Access Kurss MS Access
Uzziniet, kā izveidot un pārvaldīt datubāzes viegli un ātri. Sākot no EUR 39.
Kurss MySQL Kurss MySQL
Vadība atvērtā pirmkoda datubāzes. Sākot no EUR 49.
Kurss Datu bāzes un SQL Kurss Datu bāzes un SQL
Izveidot un pārvaldīt relāciju datu bāzēm. Sākot no EUR 39.
Skatīt arī ...
Reklāmas

celebrity2nds.com

Reklāma
Par mums
Sazinieties ar mums
Sadarboties
Atruna
© 2003 - 2012 celebrity2nds.com - portāls itāļu Webmaster - Visas tiesības rezervētas | Powered by Internet Media IKIweb Srl - PIVA 02848390122

kā frontpage ievietot frame