테이블에 대한 일부 필드가 문자열이며 현재 필드 크기의 대부분은 문자 제한이 매우 높습니다. 예를 들어 거리 이름은 100 자입니다. 큰 필드 크기를 사용하면 페널티가 있습니까? 예를 들어이 필드의 제한을 30 자로 변경하면 성능이 향상되거나 크기가 효율적입니까? 축소 후보가 될 수있는 약 50 개의 필드가 있습니다.
제안 해 주셔서 감사합니다.
테이블에 대한 일부 필드가 문자열이며 현재 필드 크기의 대부분은 문자 제한이 매우 높습니다. 예를 들어 거리 이름은 100 자입니다. 큰 필드 크기를 사용하면 페널티가 있습니까? 예를 들어이 필드의 제한을 30 자로 변경하면 성능이 향상되거나 크기가 효율적입니까? 축소 후보가 될 수있는 약 50 개의 필드가 있습니다.
제안 해 주셔서 감사합니다.
답변:
당신이 얘기 varchar하고 nvarchar아니었다면, 더 높은 필드 길이를 허용하는 것에 대한 처벌은 없습니다.
하지만 몇 가지주의 사항을 명심해야합니다.
CHAR. Varchar(2)예를 들어 실제로는 행당 2-4 바이트를 CHAR(2)사용 하지만 항상 2를 사용합니다."실제로 저장된 값보다 더 큰 필드 크기를 선언하면 페널티가 있습니까?"라는 말이 varchar로 선언 된 경우 대답은 '아니요'입니다. 내가 아는 모든 SQL DB 엔진은 실제로 데이터에 주어진 문자 수 (길이 값) 만 저장합니다. 따라서 필드를 varchar (100)로 정의하고 10 자만 저장하면 디스크에서 10 자 (길이의 경우 2 바이트 정도) 만 사용합니다. 확실치 않은 경우, 나는 일상적으로 varchar 필드를 엄청나게 크게 만듭니다.
"긴 문자 필드를 저장하면 페널티가 있습니까?"라는 대답이 그렇습니다. 오늘날 디스크 공간은 저렴하지만 여유 공간이 없기 때문에 아무 이유없이 낭비하지 않습니다. 더 중요한 것은 디스크에서 데이터를 읽는 데 시간이 걸리므로 데이터 필드가 길수록 프로그램 속도가 느려집니다. 필드가 인덱싱되면 모든 읽기가 키 값을이 큰 긴 필드와 비교해야하므로 검색 속도가 느려질 수 있습니다.
사용자에게 빅 데이터 입력 필드를 제공하면 조만간 빅 데이터 입력 필드가 사용됩니다.
내가 말했듯이, 나는 너무 작은 것이 아니라 너무 큰쪽에 잘못을 범했다. 디스크 공간은 실제 데이터를 사용 가능한 필드에 맞출 수 없기 때문에 사용자가 약어를 즉석에서 발명하지 않게 할 정도로 충분히 저렴합니다. 현재 작업중인 시스템에는 실제 제품 이름에 비해 너무 작은 제품 설명 필드가 있으므로 사용자는 약어를 사용해야합니다. 물론 모든 사용자는 다르게 약어를 사용하기 때문에 20 가지 방법으로 같은 것을 말할 수 있습니다.
실제로 테이블에 저장 될 것보다 더 큰 필드 크기를 선언 한 것에 대해 페널티가 없다고 주장하는 사람은 부정확합니다. 데이터의 실제 크기 (2 바이트 오버 헤드 포함)는 실제로 저장되는 크기이지만 실행 계획이 진행되는 한 추정치를 결정하는 데 사용되는 열 정의입니다. 따라서 10 문자 값을 저장하기 위해 varchar (1000)을 선언하면 12 문자의 디스크 공간 만 소비되지만 실행 계획 추정은 작업을 부여하는 메모리 양과 작업을 메모리에서만 수행 할 수 있는지 여부 또는 tempdb 드라이브 공간이 필요한지 여부 열을 varchar (1000)로 만들 수 있지만 엔진은 저장된 모든 값이 varchar (10)보다 실제로 작다는 것을 알지 못합니다.