단순 매개 변수화

SQL Server에서는 Transact-SQL 문에 매개 변수 또는 매개 변수 표식을 사용하여 새 SQL 문을 이전에 컴파일된 기존의 실행 계획과 일치시키는 관계형 엔진의 성능을 향상시킵니다.

보안 정보보안 정보

최종 사용자가 입력한 값을 갖는 매개 변수 또는 매개 변수 표식을 사용하는 것이 데이터 액세스 API 메서드, EXECUTE 문 또는 sp_executesql 저장 프로시저 중 하나를 사용하여 실행되는 문자열에 값을 연결하는 것보다 안전합니다.

매개 변수를 사용하지 않고 SQL 문이 실행되면 SQL Server는 내부적으로 해당 문을 매개 변수화하여 기존 실행 계획과 일치할 가능성을 높입니다. 이 프로세스를 단순 매개 변수화라고 합니다. SQL Server 2000에서는 이 프로세스를 자동 매개 변수화라고 했습니다.

다음 문을 고려해 보십시오.

SELECT * FROM AdventureWorks2008R2.Production.Product 
WHERE ProductSubcategoryID = 1;

문 끝의 값 1은 매개 변수로 지정될 수 있습니다. 관계형 엔진은 마치 값 1 대신 매개 변수가 지정된 것처럼 이 일괄 처리에 대해 실행 계획을 작성합니다. 이러한 단순 매개 변수화로 인해 SQL Server는 다음 두 문이 기본적으로 동일한 실행 계획을 생성한다는 것을 확인하고 두 번째 문에 대해 첫 번째 계획을 재사용합니다.

SELECT * FROM AdventureWorks2008R2.Production.Product 
WHERE ProductSubcategoryID = 1;

SELECT * FROM AdventureWorks2008R2.Production.Product 
WHERE ProductSubcategoryID = 4;

복잡한 SQL 문을 처리할 때 관계형 엔진은 매개 변수화할 수 있는 식을 결정하기가 어려울 수 있습니다. 복잡한 SQL 문을 사용되지 않은 기존 실행 계획과 일치시키는 관계형 엔진의 성능을 향상시키려면 sp_executesql 또는 매개 변수 표식을 사용하여 매개 변수를 명시적으로 지정합니다. 자세한 내용은 매개 변수 및 실행 계획 재사용을 참조하십시오.

[!참고]

+, -, *, / 또는 % 산술 연산자를 사용하여 int, smallint, tinyint 또는 bigint 상수 값을 float, real, decimal 또는 numeric 데이터 형식으로 암시적 또는 명시적으로 변환할 때 SQL Server에서는 특정 규칙에 따라 식 결과의 형식과 전체 자릿수를 계산합니다. 그러나 이러한 규칙은 쿼리의 매개 변수화 여부에 따라 다릅니다. 따라서 쿼리에서 유사한 식을 사용해도 다른 결과가 발생하는 경우가 있습니다. 자세한 내용은 int, bigint, smallint 및 tinyint(Transact-SQL)를 참조하십시오.

SQL Server는 단순 매개 변수화의 기본 동작에 따라 비교적 작은 클래스의 쿼리를 매개 변수화합니다. 그러나 ALTER DATABASE 명령의 PARAMETERIZATION 옵션을 FORCED로 설정하여 데이터베이스의 모든 쿼리를 특정 제한 사항에 따라 매개 변수화하도록 지정할 수 있습니다. 이렇게 하면 쿼리 컴파일 빈도를 낮추어 대량의 동시 쿼리가 발생하는 데이터베이스의 성능이 향상될 수 있습니다. 자세한 내용은 강제 매개 변수화를 참조하십시오.

또는 구문은 동일하고 매개 변수 값만 다른 쿼리 및 단일 쿼리를 매개 변수화하도록 지정할 수 있습니다. 자세한 내용은 계획 지침을 사용하여 쿼리 매개 변수화 동작 지정을 참조하십시오.

참고 항목

참조