SQL Server VARCHAR 열 너비


14

웹을 검색하면서 지나치게 넓은 VARCHAR 열을 지정할 때 성능에 영향을 미치는지에 대한 충고를 발견했습니다. 예를 들어 VARCHAR (30)은 아마도 VARCHAR (255)입니다.

전체 행이 8060 바이트를 초과하면 성능이 저하된다는 데 동의합니다. 그 외에는 의견 불일치가 있습니다.

그 주장이 사실 The default is SET ANSI PADDING ON = potential for lots of trailing spaces입니까? 총 행 너비가 8060보다 작 으면 VARCHAR 열 크기를 초과 할 때 실제 성능 문제가 있습니까?

열 너비가 중요하다는 증거


The same goes for CHAR and VARCHAR data types. Don’t specify more characters in character columns that you need.

http://www.sql-server-performance.com/2007/datatypes/


  • Length is a constraint on the data (like CHECK, FK, NULL etc)
  • Performance when the row exceeds 8060 bytes
  • Can not have unique constraint or index (key column width must be < 900)
  • The default is SET ANSI PADDING ON = potential for lots of trailing spaces

varchar (8000) 설정의 결과는 무엇입니까?


열 너비가 중요하지 않다는 증거


If you're talking about varchar and nvarchar then no, there is no penalty for allowing a higher field length.

/programming/7025996/overstating-field-size-in-database-design


The varchar datatype, by contrast, consumes only the amount of actual space used plus 2 bytes for overhead

http://sqlfool.com/content/PerformanceConsiderationsOfDataTypes.pdf


답변:


7

질문은 다음과 같이 더 잘 설명 될 수 있습니다.

"가변 길이 열의 최대 길이를 과도하게 지정하면 어떤 이점이 있습니까?"

일반적으로 다양한 링크 된 답변이 지적한 것처럼 장점이 거의 없으며 몇 가지 단점이 있습니다. 다른 우려 사항 외에도 SQL Server는 오픈 소스가 아니라는 점을 고려하십시오. 시스템에 제공된 정보를 기반으로 많은 '마법의 숫자'와 휴리스틱이 적용됩니다. 소스 코드 액세스가 없으면이 관행의 영향이 무엇인지 완전히 확신 할 수 없었습니다.

에서는 어떤 경우 컬럼의 평균 길이 / 정렬 해시 메모리 부여를 계산할 때 50 % SQL 서버가 가정보다 상당히 높은,는 최대 길이를 초과 지정하여 성능 향상을 볼 수있다. 이것은 모호한 해결 방법 이며 기본 열 정의를 변경하지 않고 명시 적 CAST또는 CONVERT주석 으로 만 적용해야 합니다. 어쨌든 전체 행 대신 정렬 하기 위해 쿼리를 다시 작성하는 것이 좋습니다.

최대 행 크기 행 내 한계를 초과 수있는 경우 (행이 실제로없는 경우에도) 행을 삭제 하면 트리거가있는 경우 예기치 않은 페이지 분할이 발생할 수 있습니다 . 업데이트는 동일한 메커니즘을 통해 조각화로 이어질 수도 있습니다.

SQL Server는 메타 데이터의 정확하고 정확한 정보가 제공되는 대부분의 경우 꽤 잘 작동합니다. '편의성'에 대한이 원칙을 타협하는 것은 현명하지 않은 것 같습니다. 합리적인 접근 방식은 저장 될 실제 데이터 및 예측 가능한 변경에 따라 합리적인 최대 길이 값을 선택하는 것입니다 .


-3

지시 한대로 행 크기가 8060을 초과하지 않는 한 (또는 최대 값이 설정되어있는 한) VARCHAR (30) 또는 VARCHAR (255) 이상을 사용하면 성능 차이가 없습니다. 링크 된 기사의 CHAR 대 VARCHAR 비교는 실제로 관련이 없습니다. 필요한 것보다 더 많은 공간을 지정해서는 안된다는 데 동의하지만, 실제로는 실제로 필요한 공간의 양을 모릅니다. 따라서 VARCHAR 공간을 자유롭게 사용하십시오. 필자는 필드 크기를 늘리려면 테이블을 다시 작성해야하지만 감소는 간단한 ALTER TABLE 문입니다.


6
가변 길이 컬럼의 크기의 증가 (증가를 제외한 단순 메타 변화 max로부터 non max). 오버 헤드가 더 높은 반대 방향입니다.
Martin Smith

답변을 공감하는 사람들은 답변하는 사람이 배울 수있는 이유를 제공해야합니다.
ron tornambe
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.