2011-03-18 4 views
6

우리 회사는 다양한 테이블과 많은 필드가있는 레거시 데이터베이스를 보유하고 있습니다.데이터베이스 (최대) 필드 길이가 성능에 영향을 줍니까?

많은 필드에는 절대로 도달 할 수없는 큰 제한 (예 : NVARCHAR(MAX))이있는 것 같습니다.

일반적으로 입력되는 것보다 최대 너비 또는 2 ~ 3 배 큰 값으로 임의로 필드를 성능에 부정적인 영향을 미치나요?

성능을 필드 길이와 어떻게 조화시켜야합니까? 잔액이 있습니까?

+0

하지만 VARCHAR MAX)'- 큰 단점이있을 수 있습니다. (모든 색인은 최대 900 바이트를 가질 수 있습니다 - 최대 (MAX) 열 *은 최대 2GB가 될 수 있습니다. 어느 인덱스에도 포함될 수 없음) –

+1

관련/중복 http://stackoverflow.com/questions/4378795/sql-performance-is-there-any-performance-hit-using-nvarcharmax-instead-of-nvar –

+0

가능 [varchar (max) everywhere?] (http://stackoverflow.com/questions/2091284/varcharmax-everywhere) – Justin

답변

7

가이 질문에 두 부분입니다 :

VARCHAR 상처 성능을 통해 NVARCHAR를 사용합니까? 예, 유니 코드 필드에 데이터를 저장하면 스토리지 요구 사항이 두 배로 증가합니다. 이 필드에 저장된 데이터는 SQL Server 2008 R2가 출시 될 때까지 필요로하는 크기의 2 배이며 unicode compression을 포함합니다. 테이블 스캔은 버퍼 캐시에서 메모리에 저장할 수있는 데이터의 양이 2 배 길고 절반 만 소요됩니다

VARCHAR (MAX), NVARCHAR (MAX) 및 이러한 종류의 필드를 사용하는 경우 직접적인 문제는 아니지만 테이블을 인덱싱해야하는 경우에는 다음 작업을 수행 할 수 없습니다. SQL Server 2005/2008/R2에서 온라인으로 해당 인덱스를 다시 작성하십시오. (Denali는 MAX 필드가있는 테이블을 개선하여 일부 인덱스를 온라인으로 재구성 할 수 있습니다.)

+0

'VARCHAR (MAX)'및 관련 필드를 인덱싱 할 수 없습니다. – Justin

+1

죄송합니다. 좀 더 구체적으로 설명해야합니다. 이러한 표에 색인을 생성해야하는 경우 해당 색인을 온라인으로 재구성 할 수 없습니다. 이러한 필드가있는 테이블은 SQL Server 2005/2008/2008R2에서 온라인으로 다시 인덱싱 할 수 없습니다. –

2

예, 쿼리 최적화 프로그램은 페이지에 맞는 행 수를 추측 할 수 있습니다. varchar 필드가 필요한 것보다 많이 있으면 SQL Server는 내부적으로 잘못된 행 수를 추측 할 수 있습니다.

+0

쿼리 최적화 프로그램은 '행이 얼마나 넓은가'를 사용하여 '얼마나 많은 행이 각 행에 적합 할 수 있는지'를 추정합니다. 페이지'. –

-2

성능면에서 대부분의 경우 대답은 아니오입니다. 응용 프로그램 수준에서 성능을 분석 할 수 있다고 생각합니다. 데이터를 수집하고 요구 사항을 얻은 다음 몇 가지 분석을 수행하십시오. 병목 현상은 응용 프로그램 코드, SQL 또는 스키마 설계로 인해 발생할 수 있습니다.

관련 문제