2015-01-04 3 views
0

그래서 테이블/뷰 이름 또는 SQL 쿼리를 입력으로 가져 왔고 필터링하려면 WHERE을 적용해야합니다.쿼리 성능 비교

SELECT * FROM (<ORIGINAL_QUERY_OR_TABLE_NAME>) WHERE <CONDITION> 

: 꽤 많은 일을 할 수있는 이미 기존 WHERE 절에 대한 쿼리를 구문 분석하기 때문에, 나는 내가 우산SELECT로 들어오는 질의를 둘러싸는 더 잘하고 이런 식으로 WHERE을 추가 거라고 생각 나는 하위 쿼리를 작성했기 때문에 이것이 성능상의 불이익을 초래할 수 있다고 생각했기 때문에 원래 쿼리와 수정 된 버전에 대한 실행 계획을 만들었습니다. 나는 이제 내 앞에서 두 가지 계획을 가지고 있지만, 나는 그것들을 비교하는 방법을 모르겠다. 두 계획에 표시된 노드는 동일하며 비용은 상위 쿼리의 백분율로 표시됩니다.이 둘을 비교할 수있는 절대 값이 아닙니다.

그래서 내 질문은 : 난 정말이 좋은 방법 일

  1. 암; 즉, 실적 조회가없는 경우
  2. 두 실행 계획을 어떻게 비교합니까?

참고 : 이것은 SQL Server 2008 R2입니다.

편집 나는 단순히 문자열 WHERE,의 기존의 테스트하여 들어오는 쿼리에 AND <CONDITION>로 필터링 절을 추가하지 않았는지 궁금 사람들의

은 모든 것을 간단하지 않다 있습니다. 다음 쿼리를 고려하십시오

각 쿼리는 백분율을 볼 수 있습니다 당신은 두 개 (또는 그 이상)의 쿼리의 한 쿼리에서 실제 실행 계획을 실행할 수 있습니다,이 쿼리 사이의 상대적인 성능 차이를 참조하기 위해
1. SELECT * FROM MyTable 
2. SELECT * FROM MyTable WHERE MyField = 123 
3. SELECT [WHAT], [WHEN], [WHERE] FROM MyTable 
4. SELECT * FROM MyTable ORDER BY [WHERE] 
+0

TIME 및 IO 옵션을 사용하여 SET STATISTICS ON을 사용하여 어떤 쿼리에 시간이 많이 걸리는지 확인하지 마십시오. –

+0

@PareshJ : 정말로 도움이됩니다. 두 쿼리 간의 시간 차이는 최소화됩니다. 60K 행에 대해 두 개의 쿼리는 각각 ** 2032ms ** 및 ** 2103ms **를 사용 했으므로 여기서는 꽤 안전하다고 생각합니다. – dotNET

+0

측정 성능은 거의 항상보기보다 어렵습니다. 각 테스트를 실행하기 전에 캐시를 지우셨습니까? – HABO

답변

0

했다.

예를 들어 첫 번째 쿼리에 50 %, 두 번째 쿼리에 50 %가 표시되면 쿼리 성능이 동일 함을 나타냅니다. 이 경우 실행 계획이 동일하다는 것을 알 수 있습니다. 하나의 쿼리가 다른 쿼리보다 훨씬 높은 백분율을 보게되면 쿼리의 어느 부분이 가장 오래 걸렸는지 살펴볼 수 있습니다.

+0

mmmm ... 그렇게 놓쳐서는 안됩니다. 기다려. – dotNET

+0

매우 도움이됩니다. 그들은 각각 50 %를 보여주고 있습니다. 그래서 나는 SQL Server가 내부적으로 어떻게 든 그것을 최적화한다고 가정합니다. – dotNET