SQL Server 2005에서도 SQL Server 2000과 마찬가지로 행당 최대 바이트 수는 8,060바이트이지만 SQL Server 2000과 달리 SQL Server 2005에서는 varchar, nvarchar, varbinary 또는 sql_variant 또는 CLR 사용자 정의 유형 열을 사용하여 정의된 전체 테이블의 길이가 8,060바이트를 초과할 수 있습니다. 이것은 varchar, nvarchar, varbinary, sql_variant 또는 CLR 사용자 정의 유형 열을 만들거나 수정할 때 적용되며 데이터를 업데이트하거나 삽입할 때도 적용됩니다. 행 오버플로를 포함하는 테이블은 sys.dm_db_index_physical_stats 동적 관리 개체를 사용하여 정보를 얻을 수 있습니다.
n 행당 8,060바이트를 초과하는 varchar, nvarchar, varbinary, sql_variant, CLR 사용자 정의 유형 열 사용시 고려할 사항
1. SQL Server 2005 데이터베이스 엔진에서 페이지당 8KB의 제한은 여전히 유효하기 때문에 8,060바이트의 행 크기 제한을 초과하면 성능이 저하될 수도 있습니다.
그러므로, 행 오버플로 데이터가 있는 행에서 쿼리가 자주 수행될 가능성이 높은 경우에는 일부 열이 다른 테이블로 이동하도록 테이블을 정규화하십시오.
2. varchar, nvarchar, varbinary, sql_variant 및 CLR 사용자 정의 유형 열의 개별 열 길이에는 여전히 8,000바이트의 제한이 적용 되며, 이 열이 결합되는 경우에만 테이블의 8,060바이트의 행 제한을 초과할 수 있습니다.
3. char 및 nchar 데이터를 비롯하여 다른 데이터 형식 열의 합계에는 8,060바이트의 행 제한이 적용되어야 합니다. (max)를 사용하는 큰 개체 데이터도 8,060바이트의 행 제한에서 제외됩니다.
4. 클러스터형 인덱스의 인덱스 키는 기존 데이터가 ROW_OVERFLOW_DATA 할당 단위에 있는 varchar 열을 포함할 수 없습니다.
5. 행 오버플로 데이터가 있는 열을 비클러스터형 인덱스의 키 열이나 키가 아닌 열로 포함할 수 있습니다.
[따라하기] 행 오버플로 확인하기 |
USE Sample; GO CREATE TABLE RowOverFlow ( col1 int identity(1,1), col2 char(500), col3 varchar(8000), col4 varchar(8000) ); GO -- 명령이 완료되었습니다. INSERT INTO RowOverFlow(col2, col3) VALUES ('aaaaa','aaaaaa…<지면 할애로 생략>….aaaa’, 'aaaaaa…..aaaa’); GO SELECT object_id,index_type_desc,alloc_unit_type_desc FROM sys.dm_db_index_physical_stats(db_id('sample'),Object_id('RowOverFlow3'),NULL,NULL,NULL) GO /* 229575856 HEAP IN_ROW_DATA 229575856 HEAP ROW_OVERFLOW_DATA */ |
'연구개발 > SQL2005' 카테고리의 다른 글
[SQL 2005 GUIDE] 테이블 변경 - 열 추가하기 (0) | 2009.07.06 |
---|---|
[SQL 2005 GUIDE] 테이블 옵션 - large value (0) | 2009.07.06 |
[SQL 2005 GUIDE] Objects 이름 변경하기 (0) | 2009.07.06 |
[SQL 2005 GUIDE] CHECK 제약 조건 (0) | 2009.07.06 |
[SQL 2005 GUIDE] 제약 조건(1) (0) | 2009.07.06 |