[sql-server] 큰 테이블에서 VARCHAR 컬럼의 크기를 늘릴 때 문제가 있습니까?

SQL Server 2008을 사용하고 있으며 약 500k 행이있는 테이블에서 VARCHAR 필드를 (200에서 1200) 더 크게 만들어야합니다. 내가 알아야 할 것은 내가 고려하지 않은 문제가 있는지 여부입니다.

이 TSQL 문을 사용할 것입니다.

ALTER TABLE MyTable
ALTER COLUMN [MyColumn] VARCHAR(1200)

나는 이미 데이터 사본에 대해 시도해 보았고이 진술은 내가 볼 수있는 나쁜 영향을 미치지 않았습니다.

그래서 내가 고려하지 않았을 가능성이있는 문제가 있습니까?

그건 그렇고, 열은 인덱싱되지 않습니다.



답변

이는 메타 데이터 변경 일 뿐이며 빠릅니다.

관찰 : SET ANSI_xx 설정 중 하나가 다른 경우 “사고”를 피하기 위해 명시 적으로 NULL 또는 NOT NULL을 지정합니다. 예를 들어 어떤 이유로 SSMS가 아닌 osql에서 실행


답변

이 질문을 검색했기 때문에 2 센트를 추가하고 싶었습니다. b / c 비슷한 상황에 처해있었습니다.

인식 에서 변경하는 동안 것을 varchar(xxx)하는 것은 varchar(yyy)참으로 메타 데이터 변경,하지만에 변경하는 것은 varchar(max)아니다. 때문에 varchar(max)값 (BLOB 값 일명 – 이미지 / 텍스트 등) “행에서”하지 테이블 행 내에서 디스크에 다르게 저장되지만. 따라서 서버는 큰 테이블에서 열광하고 몇 분 (시간) 동안 응답하지 않습니다.

--no downtime
ALTER TABLE MyTable ALTER COLUMN [MyColumn] VARCHAR(1200)

--huge downtime
ALTER TABLE MyTable ALTER COLUMN [MyColumn] VARCHAR(max)

추신. nvarchar또는 코스 에도 동일하게 적용됩니다 .


답변

Varchar (200)에서 Varchar (1200)로 변경하면 메타 데이터 변경 일 뿐이므로 문제가 발생하지 않으며 SQL Server 2008이 과도한 공백을 자르기 때문에 성능 차이가 없어야합니다. 변화.


답변

열을 varchar (max)로 변환하지 않아야하는 또 다른 이유는 varchar (max) 열에 인덱스를 만들 수 없기 때문입니다.


답변

제 경우에는 alter column이 작동하지 않았으므로 다음과 같이 ‘Modify’명령을 사용할 수 있습니다.

alter table [table_name] MODIFY 열 [column_name] varchar (1200);


답변