2012-09-20 3 views
-1

이 페이지를 보면 :로드하는 데 30 초 이상 걸릴 수 있기 때문에 실제로 액세스 할 수없는 페이지를 발견하게됩니다. 이유는 각 범주의 비즈니스 구성원 수를 세는 카운터가 있기 때문입니다. 현재 회원수가 백만 명이 넘고 현재 스크립트가 쓸모 없기 때문에 기존 스크립트의 속도를 높일 수있는 방법이 있는지 알고 싶습니다. 다음은 현재 스크립트입니다.계산 속도 향상

SELECT COUNT(MemberID) AS MembersInCountyCat 
FROM Member 
WHERE NYKACountyID = @NYKACountyID 
AND (
     NYKACatID IN (
      SELECT NYKACatID 
      FROM NYKACat 
      WHERE ParentID = @NYKACatID 
     ) 
     OR 
     NYKACatID = @NYKACatID 
    ) 
AND ProfileTypeID <> 1 

SQL 스크립트를 어떻게 빠르게 실행할 수 있는지에 대한 조언은 크게 감사하겠습니다. 사전에

많은 감사,

neojakey는

+0

을 벗어 다음 읽고 동의를 할 수없는 경우 더러운
를 읽을 수 있습니다 당신의 질문. –

+1

MYKACountyID, NYKACatID','ParentID' 및'ProfileTypeID'에 대한 색인이 있습니까? SQL Server의 ** 버전 **을 사용하고 있습니까? 'ProfileTypeID <> 1 절에 일치하는 (또는 제외되는) 행 수에 따라 ** 필터링 된 ** 색인 (** 2008 ** 및 이후 버전에서 사용 가능)이 유용 할 수 있습니다. –

+1

#가 있어야합니다 실시간? – UnhandledExcepSean

답변

0
SELECT COUNT(MemberId) AS MembersInCountyCat 
FROM Member 
    INNER JOIN NYKACat ON Member.NYKACatId = NYKACat.NYKACatId 
WHERE NYKACountyId = @NYKACountyId 
    AND (NYKACat.NYKACatId = @NYKACatId OR NYKACat.ParentId = @NYKACatId) 
    AND ProfileTypeId <> 1 

당신은 ProfileTypeID, Member.NYKACountyId 및 Member.NYKACatId에 인덱스를 가지고 있는지 확인하십시오.

+0

인덱스가 있는지 어떻게 확인합니까? 하나도 없으면 어떻게 만들 수 있습니까? – neojakey

+0

SQL 스크립트를 사용자가 입력 한 것으로 변경하고 제안한 필드가 포함 된 새 인덱스를 만들었습니다. 훌륭한 결과를 얻었습니다. 충분히 감사 할 수 없습니다. – neojakey

1

이 기능을 사용해보십시오. NYKACat 조서를 조인으로 옮기는 것이 도움이 될 수 있으며 그것이 해를 끼칠 수 있다고 생각하지 않습니다. NYKACat.ParentID = @NYKACatID 또는 NYKACat.NYKACatID = @NYKACatID가 NYKACat에서 대부분의 행을 제거하면 그 행을 앞당겨 수행 할 수 있습니다. (NOLOCK)와

는 더러운 우리의 요구 사항을 리버스 엔지니어링 할 필요가 없습니다 예를 들어 데이터와 원하는 결과를 제공하십시오

SELECT COUNT(Member.MemberID) AS MembersInCountyCat 
FROM Member with (nolock) 
JOIN NYKACat with (nolock) 
    on NYKACat.NYKACatID = Member.NYKACatID 
and (NYKACat.ParentID = @NYKACatID or NYKACat.NYKACatID = @NYKACatID) 
WHERE Member.NYKACountyID = @NYKACountyID 
    and Member.rofileTypeID <> 1