[SQL] VARCHAR에 대한 장점은 (500)를 통해 VARCHAR (8000)가있다?
SQLVARCHAR에 대한 장점은 (500)를 통해 VARCHAR (8000)가있다?
나는 MSDN 포럼에이에 읽어했는데 여기 난 아직 명확하지 않다. 나는 이것이 올바른 생각 : 그 단점이 있으므로 (최대) 대 Varchar는, 텍스트 데이터 형식으로 저장됩니다. 그래서 수 있습니다 당신의 분야에 안정적으로 8000 자 이하가 될 것이라고 말했다. 내 데이터베이스 테이블에 BUSINESSNAME 필드처럼. 실제로, 비즈니스 이름은 아마 항상 500 자 (내 모자 나갔어 번호를 당기는) 아래에있을 것입니다. 내가 8K 글자 수에 따라 잘 가을에 걸쳐 실행하는 것이 VARCHAR 필드의 많은 것 같다.
그래서 나는 그 분야 포함 된 VARCHAR (500) 대신 VARCHAR (8000)해야한다? 나는 SQL의 이해가 무엇에서 그 둘 사이에는 차이가 없습니다. 그래서, 쉽게 인생을 만들기 위해, 나는 VARCHAR (8000)로 내 모든 VARCHAR 필드를 정의 할 것입니다. 그 어떤 단점이 있습니까?
관련 : VARCHAR 컬럼의 크기 (이 내 질문에 대답 같은 느낌하지 않았다).
해결법
-
==============================
1.처리의 관점에서, 그것은 VARCHAR (500) 대 사용 VARCHAR (8000)에 차이를 만들 수 없습니다. 이 필드가 보유하고 VARCHAR 길이 그렇게해야하는 최대 길이를 정의하는 종류의 일이의 더 "좋은 연습"의입니다. 그것은 데이터 검증을 지원하는 데 사용할 수있는 뭔가. 예를 들어, 만들기 상태의 약어는 2 자 또는 5 개 또는 9 문자로 우편 / 우편 번호합니다. 이 데이터는 다른 시스템이나 필드 길이가 중요했다 사용자 인터페이스 (예를 들어, 메인 프레임 플랫 파일 데이터 세트)와 상호 작용할 때에 더 중요한 구별로 사용하지만, 요즘 나는 그것이 무엇보다 습관 같아요.
처리의 관점에서, 그것은 VARCHAR (500) 대 사용 VARCHAR (8000)에 차이를 만들 수 없습니다. 이 필드가 보유하고 VARCHAR 길이 그렇게해야하는 최대 길이를 정의하는 종류의 일이의 더 "좋은 연습"의입니다. 그것은 데이터 검증을 지원하는 데 사용할 수있는 뭔가. 예를 들어, 만들기 상태의 약어는 2 자 또는 5 개 또는 9 문자로 우편 / 우편 번호합니다. 이 데이터는 다른 시스템이나 필드 길이가 중요했다 사용자 인터페이스 (예를 들어, 메인 프레임 플랫 파일 데이터 세트)와 상호 작용할 때에 더 중요한 구별로 사용하지만, 요즘 나는 그것이 무엇보다 습관 같아요.
-
==============================
2.이 차이를 만들 수있는 한 예는 트리거 후 함께 테이블에 행 버전 정보를 추가 피하는 성능 최적화를 방지 할 수 있다는 것입니다.
이 차이를 만들 수있는 한 예는 트리거 후 함께 테이블에 행 버전 정보를 추가 피하는 성능 최적화를 방지 할 수 있다는 것입니다.
이 여기에 SQL 키위에 의해 덮여있다
마찬가지로이 LOB 열 또는 잠재적하여 InRow 제한하지만 페널티를 초과 할 수 열 폭의 조합을 사용할 수있다 2,016 때문에 메모리에 최적화 된 테이블을 사용하는 경우.
이 메모리 소비와 성능에 큰 부정적인 영향을 미칠 수
테이블 이제까지 SSIS를 이용하여 처리되는 경우에 선언 위에 열 폭이 큰 차이를 만들 수있는 다른 경우이다. 가변 길이 (비 BLOB) 컬럼에 할당 된 메모리는 메모리 버퍼의 비효율적 사용 (예)으로 이어질 수있는 최대 길이를 선언 실행 트리의 각 행 및 열 고정 '당이다. SSIS 패키지 개발자가 소스보다 작은 열 크기를 선언 할 수 있습니다 동안이 분석은 가장 앞을 수행하고있다이 적용.
위로 SQL Server 엔진 자체가 유사한 경우는 SORT 작업 SQL 서버에 할당하는 메모리 부여를 계산할 때하는 열은 평균 X / 2 바이트를 소비하는 것 VARCHAR (X)를 가정한다는 것이다.
당신의 VARCHAR 컬럼의 대부분은보다 풀러 경우이 tempdb에에 유출 정렬 작업으로 이어질 수 있습니다.
귀하의 경우 귀하의 VARCHAR 컬럼은 8000 바이트로 선언 실제로는 훨씬 적은 쿼리가 분명 비효율적 인 필요로하지 않으며, 메모리 부여를 대기로 이어질 수있는 메모리 할당됩니다보다는 내용이있는 경우.
이 여기에 또는 아래 참조에서 SQL 워크샵 웹 캐스트 1 개 다운로드 2 부에 덮여있다.
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
-
==============================
3.그렇다 모범 사례에서 (BBlake의 대답)
그렇다 모범 사례에서 (BBlake의 대답)
-
==============================
4.조금 덜 분명하고 나중에 좀 잡을 수있는 큰 열 몇 가지 단점이 있습니다 :
조금 덜 분명하고 나중에 좀 잡을 수있는 큰 열 몇 가지 단점이 있습니다 :
일반적으로 열 너비와 보수적하려고합니다. 이 문제가 될 경우, 당신은 쉽게 요구에 맞게 그것을 확장 할 수 있습니다. 나중에 메모리 문제가 발견되면 넓은 열 이후 감소하는 것은 데이터의 손실없이 불가능 될 수 있습니다 그리고 당신은 어디서부터 시작 해야할지하지 않습니다.
비즈니스 이름 귀하의 예제에서, 당신이 그들을 표시 할 수있는 위치에 대한 생각합니다. 정말 500 개 문자를위한 공간이 있습니까? 그렇지 않은 경우 등을 저장하기에 약간의 포인트가있다. http://en.wikipedia.org/wiki/List_of_companies_of_the_United_States는 어떤 회사 이름을 나열하고 최대 50 자에 관한 것입니다. 그래서 열 최대 100을 사용하십시오. 어쩌면 더 80있다.
-
==============================
5.이상적으로는 (500 합리적으로 크기되지 않습니다) 합리적 크기의 길이로 아래로,보다 작은 가고 싶어하고 데이터가 너무 클 수 및 유용한 오류를 보내려고 할 때 반드시 클라이언트 검증 어획량을합니다.
이상적으로는 (500 합리적으로 크기되지 않습니다) 합리적 크기의 길이로 아래로,보다 작은 가고 싶어하고 데이터가 너무 클 수 및 유용한 오류를 보내려고 할 때 반드시 클라이언트 검증 어획량을합니다.
VARCHAR를 실제로 사용되지 않는 공간을 데이터베이스에 공간을 예약하지 않을 동안, 나는 수 바이트보다 넓은되는 데이터베이스 행에 대한 snit을 가진 SQL Server 버전을 리콜 (정확한 수를 기억하지 않습니다) 실제로 밖으로 던지기 데이터는 적합하지 않았다 뭐든간에. 그 바이트의 특정 수는 SQL 서버의 내부 일을 위해 예약되었다.
from https://stackoverflow.com/questions/2009694/is-there-an-advantage-to-varchar500-over-varchar8000 by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] MySQL의 외래 키 제약 조건은 잘못 오류가 형성된다 (0) | 2020.03.17 |
---|---|
[SQL] MySQL의 순위 그룹화 수행하는 방법 (0) | 2020.03.17 |
[SQL] 재귀는 자체 조인 할 수있는 가장 간단한 방법은? (0) | 2020.03.17 |
[SQL] SELECT와 INSERT (0) | 2020.03.17 |
[SQL] 어떻게 비슷한 결과 및 종류의 유사성을 찾는 방법은? (0) | 2020.03.17 |