..


스폰서 링크

SQL Server의 T - SQL 스크립트의 성능을 최적화

빈센조 Gaglio 쓴 기사
4 페이지 4

첫 번째 해결 방법은 다음과 같이 다시 작성, 직접 쿼리에서 JOIN을 사용하는 것입니다






 SELECT PC.LastName + '' + PC.FirstName [고객 이름]



      



 , SC.​​CustomerType







 Sales.Customer SC FROM







 외부 YES Sales.Individual JOIN 왼쪽







 = SC.CustomerID SI.CustomerID ON







 왼쪽 외부 조인 Person.Contact PC를







 = SI.ContactID PC.ContactID ON



이 두 번째 버전에서는 간단히 말해서 나는 당신 FROM 절에 넣고 함수 GetName에있는 테이블을 사용합니다. 나는 또한 직접 연락 테이블에 두 개의 컬럼을 합치하여 SELECT 문에서 열 목록에서 함수 호출 GetName를 교체.

여기 프로파일이 쿼리를 실행 보여줍니다 무엇

당신은 쿼리의 이전 버전에서 여러 통화의 얼굴을 볼 수 있듯이, 새로운 버전은 물론 성능 면에서 큰 절약을 의미 단일​​ 호출됩니다.

지금 대신 테이블을 반환합니다 (인라인 테이블) 함수에서 원래 스칼라 함수 GetName 변환하여 무슨 일이 일어 나는지 보자. 첫째, 기능 및 denominiamola GetNameTable을 만들






 기능 GetNameTable을 (@ CustomerID를 INT) 만들기







 반환 표







 AS

 





 (RETURN



  



 SELECT 성 + ''+ FIRSTNAME [고객 이름]



  



 Sales.Customer SC FROM



  



 외부 YES Sales.Individual JOIN 왼쪽



  



 = SC.CustomerID SI.CustomerID ON



  



 왼쪽 외부 조인 Person.Contact PC를



  



 = SI.ContactID PC.ContactID ON

 

  



 CustomerID를 = @ SC.CustomerID



 



 )



당신은 데이터가 스칼라 함수 GetName의 같다 추출 쿼리를 볼 수 있듯이, 유일한 차이점은 함수는 varchar 값 대신 테이블 GetNameTable를 반환한다는 것입니다. 그가 사용하는이 새로운 기능을 사용하기 위해서는 십자가가 다음과 같은 연산자를 적용 사용해야합니다






 I. [고객 이름]을 선택



      



 , SC.​​CustomerType







 Sales.Customer SC FROM







 GetNameTable (SC.CustomerID)을 적용 교차



이 경우 다음의 결과는 프로 파일러 것입니다

의보다 효율적으로 원본 쿼리를 작성하는 방법을 최종 예를 들어 보겠습니다. 이번 우리는 다음과 같은보기를 생성하고 사용합니다






 View_GetName를 참조 CREATE







 AS



  



 SELECT 성 + ''+ FIRSTNAME [고객 이름]



        



 , SC.​​CustomerID

 

  



 Sales.Customer SC FROM



  



 Sales.Individual을 JOIN



  



 = SC.CustomerID SI.CustomerID ON



  



 Person.Contact PC를 가입



  



 = SI.ContactID PC.ContactID ON







 GO



이보기에 따라 우리는 우리의 쿼리는 다음과 같이 쓸 수






 V. SELECT [고객 이름]

 

      



 , CustomerType







 Sales.Customer SC FROM







 외부 (Outer) 조인 View_GetName V를 떠난







 SC.CustomerID CustomerID를 = R. ON



이 경우에는 프로파일의 결과는 이전 두 예제의 동일합니다. 성능이 작은 차이를 보여주고 있지만,이 세 예제 같습니다. 가장 효율적인 접근 방식은 십자가가 약간 낮은 CPU 사용률 (당신은 프로 파일러의 데이터에서 볼 수있는)에서 발생하는 조인입니다.

이 예제는 강조하기위한 것을 SELECT 문을이나 조항이 비효율적인 관행입니다 WHERE의 열 목록에서 스칼라 함수의 사용. 이러한 행위의 부정적 효과는 사용되는 질의에서 추출된 데이터의 양을 직접 비례합니다. 이런식으로 사용하면 스칼라 함수는 반복적으로 호출되는 커서처럼 행동하고, 다음 지침의 개발을 내려 무게. 따라서 쿼리의 일부에 사용되는 경우, 제안된 대안 중 하나에 같은 재작성하는 스칼라 함수를 고려.

(기사는 아래에 계속 ...)

이 문서에 나와 본 사람은 우리의 T - SQL 쿼리 및 기타 유용한 장치의 성능을 향상시킬 수있는 조치 중 일부는 향후 기사에서 설명한 것입니다 단지입니다.

같은 카테고리에 ...
E - 학습
MS 액세스 과정 MS 액세스 과정
쉽고 빠르게 데이터베이스를 만들고 관리하는 방법에 대해 알아보십시오. 2012년 6월 1일까지 -10 % 할인합니다.
코스 MySQL을 코스 MySQL을
오픈 소스 데이터베이스의 관리. 2012년 6월 1일까지 -15 % 할인.
코스 데이터베이스와 SQL 코스 데이터베이스와 SQL
관계형 데이터베이스 만들기 및 관리. 2012년 6월 1일까지 -15 % 할인.
스폰서 링크