이것이 차이를 만들 수있는 한 가지 예는 트리거 이후에 테이블에 행 버전 관리 정보를 추가하지 않는 성능 최적화를 방지 할 수 있다는 것입니다.
여기에서는 SQL Kiwi에서 다룹니다.
저장된 데이터의 실제 크기는 중요하지 않습니다. 중요한 것은 잠재적 인 크기입니다.
마찬가지로 2016 년부터 메모리 최적화 테이블을 사용하는 경우 LOB 열 또는 잠재적으로 인 로우 제한을 초과 할 수 있지만 패널티가있는 열 너비 조합을 사용할 수있었습니다.
(최대) 열은 항상 행 외부에 저장됩니다. 다른 열의 경우 테이블 정의의 데이터 행 크기가 8,060 바이트를 초과 할 수있는 경우 SQL Server는 가장 큰 가변 길이 열을 행 외부로 푸시합니다. 다시 말하지만 여기에 저장하는 데이터의 양에 의존하지 않습니다.
이는 메모리 소비 및 성능에 큰 부정적인 영향을 미칠 수 있습니다.
열 너비를 과도하게 선언하면 큰 차이가 발생할 수있는 또 다른 경우는 테이블이 SSIS를 사용하여 처리되는 경우입니다. 가변 길이 (비 BLOB) 열에 할당 된 메모리는 실행 트리의 각 행에 대해 고정되며 열의 선언 된 최대 길이에 따라 달라지며 이는 메모리 버퍼의 비효율적 인 사용으로 이어질 수 있습니다 (예) . SSIS 패키지 개발자는 소스보다 더 작은 열 크기를 선언 할 수 있지만이 분석은 먼저 수행하고 적용하는 것이 가장 좋습니다.
SQL Server 엔진 자체에서 비슷한 경우는 SORT
작업 에 할당 할 메모리 부여를 계산할 때 SQL Server에서 varchar(x)
열이 평균적으로 x/2
바이트를 소비 한다고 가정하는 것입니다 .
대부분의 varchar
열이 그보다 가득 차면 sort
작업이 tempdb
.
귀하의 경우 varchar
열이 8000
바이트 로 선언 되었지만 실제로 내용이 훨씬 적은 경우 쿼리에 필요하지 않은 메모리가 할당되며 이는 분명히 비효율적이며 메모리 부여를 기다릴 수 있습니다.
여기에서 다운로드 할 수있는 SQL 워크샵 웹 캐스트 1의 Part 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
FROM master..spt_values
SELECT id,name500
FROM T
ORDER BY number
SELECT id,name8000
FROM T
ORDER BY number