복붙노트

[SQL] SQL Server 2005의 쿼리 성능

SQL

SQL Server 2005의 쿼리 성능

--------------------이 (2000 000 행이) 실행하기 위해 4 초 걸리는 이유는 무엇입니까? ---------------- -----

DECLARE @AccountId INT 
DECLARE @Max INT 
DECLARE @MailingListId INT 

SET @AccountId = 6730
SET @Max = 2000
SET @MailingListId = 82924

SELECT TOP (@Max) anp_Subscriber.Id , Name, Email 
FROM anp_Subscription WITH(NOLOCK) 
  INNER JOIN anp_Subscriber WITH(NOLOCK) 
    ON anp_Subscriber.Id = anp_Subscription.SubscriberId
WHERE [MailingListId] = @MailingListId 
  AND Name LIKE '%joe%' 
  AND [AccountID] = @AccountId

이것은 --------------------- (2000, 000 행으로) 실행하는 <1 초 소요 ---------------- -------

SELECT TOP 2000 anp_Subscriber.Id ,Name, Email 
FROM anp_Subscription WITH(NOLOCK) 
  INNER JOIN anp_Subscriber WITH(NOLOCK)
    ON anp_Subscriber.Id = anp_Subscription.SubscriberId
WHERE [MailingListId] = 82924 
  AND Name LIKE '%joe%' 
  AND [AccountID] = 6730

왜 실행 시간의 차이? 나는 상단에있는 쿼리를 사용하고 싶습니다. 나는 그것을 최적화하기 위해 아무것도 할 수 있습니까?

사전에 감사합니다! /신자

해결법

  1. ==============================

    1.쿼리의 마지막에 OPTION (RECOMPILE)를 추가합니다.

    쿼리의 마지막에 OPTION (RECOMPILE)를 추가합니다.

    당신이 짐작 통계보다는 실제 변수 값에 맞는 하나를 기반으로 계획을 점점 수 있도록 SQL Server는 변수없는 "냄새"값을 수행합니다.

  2. ==============================

    2.체크에 한 가지 항목은 테이블의 MailingListId와 통해 AccountId 필드 형 INT의 여부이다. 예를 들어, 유형 BIGINT를하는 경우, 쿼리 최적화 프로그램은 종종 그 필드에 대한 인덱스를 사용하지 않습니다. 명시 적 변수를 사용하는 대신 값을 정의 할 때, 값은 암시 적으로 적절한 형식으로 변환됩니다.

    체크에 한 가지 항목은 테이블의 MailingListId와 통해 AccountId 필드 형 INT의 여부이다. 예를 들어, 유형 BIGINT를하는 경우, 쿼리 최적화 프로그램은 종종 그 필드에 대한 인덱스를 사용하지 않습니다. 명시 적 변수를 사용하는 대신 값을 정의 할 때, 값은 암시 적으로 적절한 형식으로 변환됩니다.

    있는지 확인 유형이 일치합니다.

  3. ==============================

    3.두 번째 쿼리는 2000 레코드를 처리 할 수있다. 포인트.

    두 번째 쿼리는 2000 레코드를 처리 할 수있다. 포인트.

    첫 번째는 최대 값을 찾기 위해 모든 레코드를 처리 할 수있다.

    최고 2000 당신에게 가장 높은 2000을하지 않습니다, 그것은 당신에게 결과 집합의 첫 번째 2000를 얻을 수 - 임의의 순서로.

    당신이 동일하도록 변경하려는 경우, 두 번째는 읽어야

    TOP 1

    및 anp_Subscriber.Id의 하강 (플러스 빠른 첫 번째 옵션)에 의해 다음 순서.

  4. from https://stackoverflow.com/questions/7860652/performance-of-sql-server-2005-query by cc-by-sa and MIT license