2012-03-19 2 views
4

질문이 오래되었으며 100 % 맞지 않습니다. 그러나 경험 많은 조언을 듣고 싶습니다.큰 값의 데이터 형식을 별도의 테이블에 저장해야합니까?

SQL Server 2008 R2 사용.

나는 수백만 개의 행을 저장할 테이블이 있습니다. 대부분의 열은 varbinary (max) 열 데이터의 설명 (날짜, 상태, 제목, ..)입니다. 또한 XML 데이터 형식의 2 열이 있습니다. 이 XML은 작으며 자주 질의됩니다. 내가 다른 테이블에 대한 모든 큰 값 유형을 이동하는 경우

MyTable 
    (
     SomeID varchar(20)-- queried most often 
     Date DateTime -- queried most often 
     Status VarChar(10) -- queried most often 
     Title VarChar(50) -- queried most often 
     -- some more columns here 
     SomeSmallXML xml -- queried quite often 
     SomeOtherSmallXML xml -- queried quite often 
     MyData varbinary(max) -- queried rarely 
     MyOtherData varbinary(max) -- queried rarely 
    ) 

는 : 그래서

  • 는 클러스터 된 인덱스의 온라인 인덱싱을 할 수 있습니다. 그러나 그럼 나는 xml 유형을 다른 테이블로 옮겨야합니다. 그들이 자주 자주 묻는 것처럼, 그것은 이 적당하지 않은 것처럼 보입니다. (SomeID 열은 클라이언트 응용 프로그램에서 이오고 있기 때문에 조각화가 예상됩니다. 클러스터 된 색인으로 다른 대리 키를 작성하는 것이 타당하지 않으므로 SomeID는 클러스터 된 색인의 키가됩니다.)
  • 은 대용량 데이터를 느린 저장소로 이동할 수 있습니다. 그러나 추측은 과 동일한 테이블 파티셔닝 (저속 파일 그룹의 이전 데이터) + 인덱스 을 빠른 스토리지에서 얻을 수 있습니다.

이 경우 큰 값의 데이터 유형을 다른 테이블로 옮길 이유가별로 없습니다. "sp_tableoption N'MyTable ','행 중 큰 값 유형 ','켜짐 '을 설정하는 이유가 있습니다.

귀하의 조언은 무엇입니까? 그 밖의 무엇을 고려해야합니까?

+1

(http://rusanu.com/2011/08/05/online :

그래서 최종 디자인은 다음과 같이 약 보인다 -index-operations-for-indexes-containing-lob-columns /) –

+0

예,하지만 2008 R2를 사용하고 있습니다. [추신 : 귀하의 블로그에서 그것을 보았다 :)] –

답변

1

다른 테이블의 분리 된 데이터에서 일부 LOB 데이터 (SomeID 및 Date 열)를 분리했습니다. 다른 동료와의 토론을 기반으로 결정했습니다.

에서 가장 중요한 : 은 내가 열 업데이트 속도을 고려 놓친 및 시간 데이터는 종종 를 조회하고 그들이 나이가 얻을 때 대부분의 흥미 (전부는 아니지만)의 경우하지.

그리고이 점이 차이점입니다.

그래서 함께했다 : 볼 수있는, 그래서

MyTable 
    (
     SomeID varchar(20)-- queried most often/Updated never 
     Date DateTime -- queried most often/Updated never 
     Status VarChar(10) -- queried most often/Updated few times after insert 
     Title VarChar(50) -- queried most often/Updated never 
     -- some more columns here 
     SomeSmallXML xml -- queried quite often/Updated few times after insert 
     SomeOtherSmallXML xml -- queried quite often/Updated never 
     MyData varbinary(max) -- queried rarely/Updated never 
     MyOtherData varbinary(max) -- queried rarely/Updated 1 shortly after insert 
    ) 

, 일부 LOB 데이터 -의 MyData 및 MyOtherData VARBINARY (최대)은 짧은 시간 후 정적 가져옵니다. 그들은 충분히 크고, 그래서 나는 그들을 cheep 디스크에 저장하고 어떤 시점에서 읽기 전용 파티션을 사용하고 싶습니다. MyData 나 MyOtherData가 필요한 경우가 많으므로 Date가 최근 일수록 더 자주 사용됩니다. 당신은 [온라인 LOB에있는 경우에도 다시] 할 수있는 SQL 서버 2012

MyTable 
    (
     SomeID varchar(20) 
     Date DateTime 
     Status VarChar(10) 
     Title VarChar(50) 
     -- some more columns here 
     SomeSmallXML xml 
     SomeOtherSmallXML xml 
    ) 
    MyTableLOB 
    (
     SomeID varchar(20) 
     Date DateTime -- used for partitioning 
     MyData varbinary(max) 
     MyOtherData varbinary(max) 
    ) 
관련 문제