2014-07-10 4 views
0

테이블의 다른 두 열을 기반으로 연결된 열을 만들어야합니다. 한 열은 연도 (10 개의 고유 값)이고 하나는 개인의 ID 값 (~ 150,000 고유 값)입니다. 이것은 다중 열을 키 값으로 허용하지 않는 ETL 태스크에 의해 비즈니스 키로 사용되므로이 값을 데이터베이스에 유지해야합니다.연결 열 성능 - 주문 문제입니까?

즉, 그 값을 만드는 방법을 선택할 수 있으며 주문 (ID + Year 또는 Year + ID)이 어떤 식 으로든 성능에 영향을 주는지 궁금합니다. 해가 먼저가는 경우, 처음 네 문자는 항상 실제 연도의 제한된 세트 중 하나가됩니다. ID가 처음으로 이동하면 각 사용자마다 ID가 변경됩니다. 둘 사이에 어떤 차이가 있습니까?

이 열은 ETL로드 중에 만 사용됩니다.이 열은 원본 테이블과 준비 테이블의 데이터를 조인하여 두 테이블 간의 차이점을 확인하는 데 사용됩니다. 기본 값은 아래 테이블에 있으며, 그 기본 값에 클러스터형 인덱스를 만들 계획입니다.

샘플 데이터 :

╔══════════════╦══════════════╦═════════╦═════════╗ 
║ COMPOSITE_1 ║ COMPOSITE_2 ║ AC_YEAR ║ ST_ID ║ 
╠══════════════╬══════════════╬═════════╬═════════╣ 
║ 0000001|2005 ║ 2005|0000001 ║ 2005 ║ 0000001 ║ 
║ 0000001|2006 ║ 2006|0000001 ║ 2006 ║ 0000001 ║ 
║ 0000001|2009 ║ 2009|0000001 ║ 2009 ║ 0000001 ║ 
║ 0000001|2010 ║ 2010|0000001 ║ 2010 ║ 0000001 ║ 
║ 0000001|2012 ║ 2012|0000001 ║ 2012 ║ 0000001 ║ 
║ 0000001|2013 ║ 2013|0000001 ║ 2013 ║ 0000001 ║ 
║ 0000002|2005 ║ 2005|0000002 ║ 2005 ║ 0000002 ║ 
║ 0000002|2006 ║ 2006|0000002 ║ 2006 ║ 0000002 ║ 
║ 0000002|2007 ║ 2007|0000002 ║ 2007 ║ 0000002 ║ 
║ 0000002|2008 ║ 2008|0000002 ║ 2008 ║ 0000002 ║ 
║ 0000002|2009 ║ 2009|0000002 ║ 2009 ║ 0000002 ║ 
║ 0000002|2010 ║ 2010|0000002 ║ 2010 ║ 0000002 ║ 
║ 0000002|2012 ║ 2012|0000002 ║ 2012 ║ 0000002 ║ 
║ 0000002|2013 ║ 2013|0000002 ║ 2013 ║ 0000002 ║ 
║ 0000002|2014 ║ 2014|0000002 ║ 2014 ║ 0000002 ║ 
╚══════════════╩══════════════╩═════════╩═════════╝ 

질문 하나 : Composite_1 또는 Composite_2 중 하나는 가입 기간 동안 나에게 더 나은 성능을 줄 것이다?

질문 2 : 복합 열에 대해 색인을 생성해야합니까? 그렇다면 다른 항목과 혼자서해야합니까? SSIS 작업에서이를 메모리 내 JOIN에 사용하고 OLE DB 원본 구성 요소 내에 ORDER BY로 포함 할 계획입니다.

질문 3 : 클러스터 된 인덱스가 복합 열 또는 연도 및 ID 열에 속해 있습니까? 편집 : 또는 그 연도와 ID 복합 단지의 순서에 영향을주지 않습니다 알고 있기 때문에, 나는 모든 세 포함해야합니까?

답변

1
  1. 이들을 문자열 열로 바꾸므로 색인은 문자열의 문자를 기준으로 정렬합니다. 최고의 분포와 가장 고유 한 값을 가진 필드 (연도 또는 ID)가 가장 먼저 표시되기를 원할 것입니다.
  2. 복합 열은 결합에 사용되므로 색인화해야합니다. 다른 데이터를 포함 시킬지 여부는 어떤 데이터를 다시 가져 오는 지에 따라 다릅니다.
  3. 다른 열에 클러스터 된 인덱스가 필요하지 않고 테이블이 BI/데이터웨어 하우스로드에만 사용되는 경우 복합 열에 배치 할 수도 있습니다. 그렇게하면 핵심 조회가 필요한 다른 데이터를 얻을 필요가 없습니다.
+0

고마워요! 명확히하기 : 1. 150k 고유 ID 및 10 개의 별개 연도가 주어지면 ID + Year (Composite_1)가 더 편합니다. 2. 인덱스가 SSIS JOIN의 성능에 영향을 줍니까? ORDER BY 문에 영향을주는 것을 볼 수는 있지만 실제로 데이터 흐름의 일부로 수행되었으므로 SSIS 내의 JOIN 조건에는 영향을 미치지 않는다는 소식을 실제로들은 것으로 예상됩니다. 3. 좋은 소리! 복합 요소의 순서가 ID + 연도의 순서와 항상 일치한다는 것을 안다면, 클러스터 된 인덱스에 3 개를 모두 추가하지 않는 이유가 있습니까? – AHiggins

+0

1. 맞습니다! 2. SSIS는 색인을 사용하여 참여할 레코드를 찾습니다. 3. 일반적으로 클러스터 된 인덱스의 핵심 부분을 작게 유지하는 것이 좋습니다. 자세한 내용은 technet에서 [이 기사] (http://technet.microsoft.com/en-us/library/jj835095 (v = sql.110) .aspx)를 참조하십시오. 일반 색인 안내선 및 해당 섹션의 열 고려 사항에 특히주의하십시오. –