varchar(8000)보다 varchar(500)가 유리합니까?
나는 MSDN 포럼과 여기서 이것에 대해 읽었는데 아직도 잘 모르겠다.이것이 맞다고 생각합니다.Varchar(max)는 텍스트 데이터 형식으로 저장되기 때문에 단점이 있습니다.예를 들어 필드가 확실하게 8000자 미만이라고 가정해 보겠습니다.데이터베이스 테이블의 BusinessName 필드처럼요.실제로 기업명은 항상 500자 미만일 것입니다(내 모자에서 숫자를 꺼냅니다.내가 가로지르는 많은 varchar 필드가 8k 문자 수에 훨씬 못 미치는 것 같습니다.
이 필드를 varchar(8000)가 아닌 varchar(500)로 해야 합니까?SQL에 대해 알고 있는 바로는 이 두 가지에 차이가 없습니다.따라서 생활을 쉽게 하기 위해 모든 varchar 필드를 varchar(8000)로 정의하고 싶습니다.그게 무슨 단점이 있나요?
관련: varchar 컬럼의 크기(이것이 질문에 대한 답변이라고는 생각되지 않았습니다).
이를 통해 차이가 발생할 수 있는 한 가지 예는 After 트리거가 있는 테이블에 행 버전 정보를 추가하지 않아도 되는 성능 최적화를 방지할 수 있다는 것입니다.
저장된 데이터의 실제 크기는 중요하지 않습니다.중요한 것은 잠재적인 크기입니다.
마찬가지로 2016년 이후 메모리 최적화 표를 사용할 경우 잠재적으로 인로우 한계를 초과할 수 있지만 패널티가 수반되는 LOB 열 또는 열 너비의 조합을 사용할 수 있다.
(최대) 열은 항상 오프 행으로 저장됩니다.다른 열의 경우 테이블 정의의 데이터 행 크기가 8,060바이트를 초과할 수 있는 경우 SQL Server는 가장 큰 가변 길이 열을 오프 행으로 푸시합니다.다시 말씀드리지만, 여기에 저장하는 데이터의 양에 의존하지 않습니다.
이는 메모리 소비량과 퍼포먼스에 큰 악영향을 미칠 수 있습니다.
컬럼 너비를 과도하게 선언하면 큰 차이가 발생할 수 있는 또 다른 경우는 테이블이 SSIS를 사용하여 처리되는지 여부입니다.가변 길이(비 BLOB) 열에 할당된 메모리는 실행 트리의 각 행에 대해 고정되며, 열이 선언한 최대 길이마다 할당되므로 메모리 버퍼가 비효율적으로 사용될 수 있습니다(예).SSIS 패키지 개발자는 소스보다 더 작은 컬럼사이즈를 선언할 수 있지만 이 분석은 사전에 실시하여 적용하는 것이 가장 좋습니다.
로 SQL Server에 할 때 다음과 가 있습니다.SORT
는 "SQL Server"가 "SQL Server"라고 합니다.varchar(x)
의 소비량은 "" " " " "x/2
수
의 대부분이varchar
가 더 많으면 열 수가 더 많아져서 열 수가 더 많으면 열 수가 더 .sort
되는 조작tempdb
.
, 의 경우,varchar
은 컬음음음 음음음 as as as로 됩니다.8000
그러나 실제로는 쿼리에 할당되지 않은 메모리가 할당되는 것보다 훨씬 적은 콘텐츠입니다.이것은 명백히 비효율적이며 메모리 허가를 기다리는 결과를 초래할 수 있습니다.
이 내용은 SQL 워크샵 웹캐스트1 파트2에서 다루어집니다.이 웹캐스트1은 여기서 다운로드하거나 아래를 참조해 주십시오.
use tempdb;
CREATE TABLE T(
id INT IDENTITY(1,1) PRIMARY KEY,
number int,
name8000 VARCHAR(8000),
name500 VARCHAR(500))
INSERT INTO T
(number,name8000,name500)
SELECT number, name, name /*<--Same contents in both cols*/
FROM master..spt_values
SELECT id,name500
FROM T
ORDER BY number
SELECT id,name8000
FROM T
ORDER BY number
처리의 관점에서는 varchar(8000)와 varchar(500)를 사용해도 차이가 없습니다.필드에 포함할 수 있는 최대 길이를 정의하고 해당 길이의 varchar를 만드는 것은 "좋은 관행"에 가깝습니다.데이터 검증에 사용할 수 있습니다.예를 들어, 주 약어는 2자, 우편번호는 5자 또는 9자로 지정합니다.예전에는 필드 길이가 중요한 다른 시스템이나 사용자 인터페이스(예: 메인프레임 플랫 파일 데이터 세트)와 데이터를 상호 작용할 때 이 방법이 더 중요한 차이점이었습니다. 하지만 요즘은 다른 무엇보다 더 습관적인 방법이라고 생각합니다.
큰 열에는 몇 가지 단점이 있는데, 이 단점은 조금 덜 명확하고 나중에 알게 될 수 있습니다.
- INDEX에서 사용하는 모든 열 - 900바이트를 초과할 수 없습니다.
- ORDER BY 절의 모든 열은 8060바이트를 초과할 수 없습니다.이것은 일부 열에만 적용되기 때문에 이해하기 어렵습니다.자세한 내용은 SQL 2008 R2 행 크기 제한을 초과하였습니다.)를 참조하십시오.
- 총 행 크기가 8060바이트를 초과하면 해당 행의 "페이지 유출"이 발생합니다.이는 성능에 영향을 미칠 수 있습니다(페이지가 SQL Server의 할당 단위이며 8000바이트 이상의 오버헤드로 고정됩니다).이것을 넘는 것은 심하지 않지만, 눈에 띄기 쉬우므로, 피할 수 있도록 해 주세요.)
- 다른 많은 내부 데이터 구조, 버퍼 및 사용자 고유의 변수와 테이블 변수 모두 이러한 크기를 미러링해야 합니다.크기가 너무 크면 과도한 메모리 할당이 성능에 영향을 줄 수 있습니다.
일반적으로 열 너비를 줄이도록 합니다.문제가 발생하면 필요에 맞게 쉽게 확장할 수 있습니다.나중에 메모리 문제가 발견되면 데이터를 손실하지 않고 넓은 열을 축소할 수 없게 되어 어디서부터 시작해야 할지 알 수 없게 됩니다.
예를 들어, 기업명을 표시하는 장소를 생각해 주세요.정말 500자를 넣을 수 있는 공간이 있나요?그렇지 않은 경우 보관하는 것은 의미가 없습니다.http://en.wikipedia.org/wiki/List_of_companies_of_the_United_States 에는 몇 가지 회사 이름이 나열되어 있으며 최대 글자 수는 약 50자입니다.그래서 최대 열에는 100을 사용합니다.아마 80 정도 될 거야.
베스트 프랙티스와는 별도로 (BBlake의 답변)
- DDL을 사용하면 최대 행 크기(8060) 및 인덱스 폭(900바이트)에 대한 경고가 표시됩니다.
- 이 제한을 초과하면 DML이 중지됩니다.
- ANSI PADDING ON이 기본이므로 전체 공백 로드를 저장할 수 있습니다.
보다 작은 사이즈로 하는 것이 이상적입니다.(500은 적당한 사이즈가 아닙니다)그리고 데이터가 너무 커지면 클라이언트의 검증에 의해 유효한 에러가 발생하는 것을 확인할 수 있습니다.
varchar는 실제로 데이터베이스에 사용되지 않는 공간을 예약하지는 않지만 데이터베이스 행이 바이트 수보다 넓어서(정확한 수를 불러오지 않음), 실제로 맞지 않는 데이터는 모두 삭제되는 것에 대한 정보가 있는 SQL Server 버전을 기억합니다.이러한 바이트 중 일정 수는 SQL Server 내부용으로 예약되어 있습니다.
언급URL : https://stackoverflow.com/questions/2009694/is-there-an-advantage-to-varchar500-over-varchar8000
'programing' 카테고리의 다른 글
CTE와 임시 테이블 중 어느 쪽이 더 퍼포먼스입니까? (0) | 2023.04.20 |
---|---|
목록 대신 Blocking Collection을 사용할 때와 Concurrent Bag을 사용할 때 (0) | 2023.04.20 |
윈도우즈 배치 스크립트에서 날짜 및 시간 형식 지정 (0) | 2023.04.20 |
기존 테이블에서 테이블(구조)을 작성합니다. (0) | 2023.04.20 |
C# Excel Interop - 워크시트를 호출할 때 '게시' 대화 상자를 표시하지 않습니다.ExportAsFixedFormat (0) | 2023.04.15 |