2012-12-06 4 views
0

배경 : 테이블에는 약 200m 행의 55GB가 있습니다.테이블에서 이름이 변경된 인덱스, 즉 테이블에서 변경된 인덱스가 중요합니까?

중복 테이블에 행 복사를해야하지만 BIGINT ID를 사용하고 원본 테이블에서 CREATE 스크립트를 생성 할 때 테이블 이름, PK의 INT 값 , 그리고 PRIMARY KEY CONSTRAINT (모든 것이 변경되어야 함).

제 질문은 PRIMARY KEY CONSTRAINT 이름을 변경하고 다시 변경하지 않는다면 문제가 될 수 있습니까? 저장 프로 시저 또는 직접 명령이이 제약 조건을 인덱스 등으로 직접 호출 할 수 있습니까? 나중에 이름을 바꿔야 할 필요가 있다면, 즉각적인 프로세스인가, 아니면 긴 테이블이 긴 테이블인가?

다른 색인에 대해서는 중요하지 않다고 생각합니다. 새로운 색인에서 다시 작성하기 전에 원래 표에 놓아야합니다.

그리고 하나 더 질문 : 테이블이 크기에 - 마음의 성능과 대용량 시스템, 나는 다음과 같은 값?

WITH (
    PAD_INDEX = OFF, 
    STATISTICS_NORECOMPUTE = OFF, 
    IGNORE_DUP_KEY = OFF, 
    ALLOW_ROW_LOCKS = ON, 
    ALLOW_PAGE_LOCKS = ON, 
    FILLFACTOR = 95 
) ON [PRIMARY] 

답변

4

인덱스 이름 중 하나가 일반적으로하지 않습니다 변화 재검토해야 프로그래밍 API에서 직접 참조됩니다. '인덱스에서 선택'또는 '인덱스에 삽입'구문이 없으며 모든 것이 테이블 객체를 참조합니다. 예를 들어 table hints과 같이 색인 이름이 노출되어있는 곳은 거의 없습니다.

그러나 물리적 레이아웃 (예 : 색인 및 제약 조건 이름)을 인식하는 관리/유지 관리 스크립트/작업을 배치 할 수 있습니다.

+0

인덱스 이름에 대한 참조를 전체 서버에서 검색하는 과정이 불가능하거나 비실용적이라고 생각합니다. 추천 된 과정은 [1] table_new에 대한 인덱스를 다른 이름으로 만들거나 [2] 다운 타임 [3] table_old [4]에서 인덱스를 삭제하고 table_new의 인덱스를 원래 이름으로 바꾸고 [5] 테이블 이름을 전환하는 것입니까? 그 단계들을 다른 순서로 놓으시겠습니까? – 333Matt

+0

PK를 제외하고 인덱스 이름이 고유 할 필요는 없다는 것을 알았습니다. 그래서 시스템이 온라인 상태에서 새로운 테이블에 구축 할 수있었습니다. 그리고 신속하게 오프라인 상태로 전환하여 이전 테이블의 데이터 마지막 ​​부분을 복사하고 'PK'를 삭제하고 새 테이블과 'PK'의 이름을 바꿉니다. – 333Matt

관련 문제