2013-09-25 2 views
0

설명 할 수없는 SQL Server 2012 Enterprise 설치 성능 문제가 있습니다. 의견이 있으시기를 바랍니다.SQL Server 2012 성능 문제

우리는 집계하는 int 열과 일련의 차원 테이블을 가진 사실 테이블을 가지고 있습니다.

  • regionId (int)를
  • 수익 (진수 10,2)
  • orderIntake (진수 10,2)

그리고 :

우리의 팩트 테이블의 구조 이것은 치수 표의 구조입니다.

  • worldR
  • regionId (int)를

사실 테이블과 차원 테이블을 통해 연결되어 egion (VARCHAR (100) 9

  • 클러스터 (VARCHAR (100))
  • 국가 (VARCHAR (100)) 해당 지역의 INNER JOIN 열입니다. 우리가 국가를 제한하지 않는 한이 성능은 꽤 좋습니다.

    예.

    SELECT SUM(revenue) FROM factTable f INNER JOIN regionDim r ON f.regionId=r.regionId

    빠른 (< 1 초)이다.

    그러나

    SELECT SUM(revenue) FROM factTable f INNER JOIN regionDim r ON f.regionId=r.regionId WHERE r.country IN ('France','Germany')

    은 약 50 만 기록을 위해 (> 8 초) 매우 느립니다.

    우리는 장소에 다음 indizes이 수행합니다 regionId 열 차원 테이블에

  • 클러스터 색인 (regionId, 국가, 클러스터, worldRegion)
  • 에 팩트 테이블에

    • ColumnStore 색인

      인덱스 또는 전체 구조 관점에서 변경할 수있는 것이 있습니까?

    +2

    당신이 쿼리 계획을보고 했습니까? 사용한 색인에 대해 무엇을 말합니까? – cdoubleplusgood

    답변

    2

    dim 테이블의 인덱스에있는 열의 순서로 두 번째 쿼리의 where 절에서이 인덱스를 사용할 수 없습니다. 이는 행이 첫 번째 색인 열 (regionId)에 의해 색인화되고 두 번째 색인 (country)으로 색인화되기 때문입니다. 두 번째 열만 사용하는 것은 이름만으로 누군가를 검색 할 때 전화 번호부를 사용하는 것과 같습니다. 국가 열에 별도의 색인을 넣고 실적이 개선되는지 확인해보십시오.

    0

    실행 계획이 없으면 문제가 무엇인지 알기가 까다 롭습니다. 먼저 차원 테이블에서 RegionID를 추출하여 표 표현식 또는 임시 테이블에 넣은 다음 더 빨리 수행 할 수 있도록 팩트 테이블에 대해 RegionID를 사용하는 지 궁금합니다.

    아마이 :

    WITH regionIDcte AS 
    (
    SELECT regionId 
    FROM regionDim 
    WHERE country IN ('France','Germany') 
    ) 
    SELECT SUM(revenue) 
    FROM factTable f 
    WHERE EXISTS 
        (
        SELECT * 
        FROM regionIDcte x 
        WHERE f.regionId = f.regionId 
    );