필요한 것보다 훨씬 큰 열 크기 사용


16

다른 사람과 SQL Server 데이터베이스를 만들고 있습니다. 테이블 중 하나는 데이터가 작고 (6 행) 일정하게 유지 될 것입니다. 새로운 행이 추가 될 가능성이 있습니다. 테이블은 다음과 같습니다.

CREATE TABLE someTable (
    id int primary key identity(1,1) not null,
    name varchar(128) not null unique
    );
INSERT INTO someTable values ('alice', 'bob something', 'charles can dance', 'dugan was here');

나는 그 name열의 문자 길이를보고 있는데 , 그 값은 32 자보다 크지 않을 것이고 24 자보다 크지 않을 것이라고 생각합니다. 예를 들어 varchar(32)?

또한 기본 열 크기를 4, 8, 32 등의 배수로 유지하면 어떤 이점이 있습니까?

답변:


15

SQL Server는 쿼리 처리를 위해 메모리를 할당 할 때 열 길이를 사용합니다. 즉, 간단히 말해서 항상 데이터에 맞게 열의 크기 를 조정해야 합니다.

메모리 할당은 쿼리에서 반환 된 행 수에 선언 된 열 길이의 절반을 곱한 값을 기준으로합니다.

6 행이있는 경우에는 조기에 과도하게 최적화하고 싶지 않을 것입니다. 이 테이블에 수백만 개의 행이있는 다른 테이블에 참여하지 않으면 varchar (24)와 varchar (32) 또는 varchar (128)간에 큰 차이가 없습니다.

두 번째 질문은 이진 배수의 열 길이 정렬에 대한 것입니다. SQL Server는 각 열의 길이에 관계없이 모든 데이터를 8KB 페이지에 저장하므로 전혀 필요하지 않습니다.


14

행이 6 개이면 아니요, 관찰 가능한 이점이 없습니다. 전체 테이블은 단일 페이지에 맞으므로 해당 페이지에서 사용할 수있는 최대 공간을 줄이면서도 전체 페이지를 점유하는 것은 실제적으로 전혀 다르지 않습니다.

그러나 더 큰 테이블에서는 올바른 크기가 중요합니다. 메모리 추정값은 모든 값이 50 % 채워진다는 가정을 기반으로하기 때문입니다. 따라서 varchar (128)을 사용하면 실제 데이터에 관계없이 모든 값이 64 바이트를 차지하므로 메모리 부여는 64b * 행 수입니다. 모든 값이 32 자 이하이면 varchar (64) 또는 varchar (32)로 만드는 것이 좋습니다. 값의 많은 비율이 최대 값에 가까워지면 char가 변동성을 취하도록 주장 할 수도 있습니다.

2의 거듭 제곱으로 문자열 길이를 제한하는 이점에 관해서는 오늘날의 하드웨어는 아무도 명백한 이점을 보여줄 수 있다고 생각하지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.