다음을 통해 공유


SQL 문 준비

SQL Server 2005 관계형 엔진에서는 SQL 문을 실행하기 전에 문을 준비할 수 있는 기능을 제공합니다. 응용 프로그램에서 SQL 문을 여러 번 실행해야 하는 경우에는 데이터베이스 API를 사용하여 다음을 수행할 수 있습니다.

  • 문을 한 번 준비합니다. 이렇게 하면 SQL 문이 실행 계획으로 컴파일됩니다.
  • 문을 실행해야 할 때마다 미리 컴파일한 실행 계획을 실행합니다. 이렇게 하면 첫 번째 실행 이후 실행할 때마다 SQL 문을 다시 컴파일할 필요가 없습니다.
    문 준비 및 실행은 API 함수 및 메서드에 의해 제어됩니다. 이것은 Transact-SQL 언어의 일부분이 아닙니다. SQL 문 실행에 대한 준비/실행 모델은 SQL 네이티브 클라이언트 OLE DB 공급자 및 SQL 네이티브 클라이언트 ODBC 드라이버에 의해 지원됩니다. 준비 요청 시, 공급자 또는 드라이버는 문 준비 요청과 함께 해당 문을 SQL Server에 보냅니다. SQL Server는 실행 계획을 컴파일하고 공급자 또는 드라이버에 그 계획에 대한 핸들을 반환합니다. 실행 요청 시, 공급자 또는 드라이버는 핸들과 관련된 계획의 실행 요청을 서버에 보냅니다.

준비된 문은 SQL Server 2005에서 임시 개체를 만드는 데 사용할 수 없습니다. 준비된 문은 임시 테이블과 같은 임시 개체를 만드는 시스템 저장 프로시저를 참조할 수 없습니다. 이러한 프로시저는 직접 실행되어야 합니다.

준비/실행 모델을 과도하게 사용하면 성능이 저하될 수 있습니다. 문이 한 번만 실행되는 경우 직접 실행은 서버로의 네트워크 왕복을 1회만 필요로 합니다. 한 번만 실행되는 SQL 문을 준비하고 실행하면 네트워크 왕복이 추가로 필요합니다. 즉 문을 준비하는 데 한 번, 문을 실행하는 데 한 번이 필요합니다.

매개 변수 표식이 사용되는 경우 문을 준비하는 것이 좀 더 효과적입니다. 예를 들어 응용 프로그램이 종종 AdventureWorks 예제 데이터베이스의 제품 정보 검색 요청을 받는 경우를 생각해 봅시다. 응용 프로그램에서는 두 가지 방법으로 이를 처리할 수 있습니다.

첫째, 응용 프로그램이 요청된 각 제품에 대해 별도의 쿼리를 실행할 수 있습니다.

SELECT * FROM AdventureWorks.Production.Product
WHERE ProductID = 63

둘째, 응용 프로그램에서 다음을 수행합니다.

  1. 매개 변수 표식(?)을 포함하는 문을 준비합니다.

    SELECT * FROM AdventureWorks.Production.Product
    WHERE ProductID = ?
    
  2. 프로그램 변수를 매개 변수 표식에 바인딩합니다.

  3. 제품 정보가 필요할 때마다 키 값으로 바인딩된 변수를 채우고 문을 실행합니다.

두 번째 방법은 문이 네 번 이상 실행될 때 좀 더 효율적입니다.

SQL Server 2005에서는 준비/실행 모델이 직접 실행에 비해 성능상의 큰 이점이 없는데 이는 SQL Server 2005에서 실행 계획을 재사용하기 때문입니다. SQL Server 2005에서는 SQL 문을 이전에 실행된 동일한 SQL 문에 대해 생성된 실행 계획과 비교하는 효율적인 알고리즘을 제공합니다. 응용 프로그램이 매개 변수 표식을 사용하여 여러 번 SQL 문을 실행하는 경우 SQL Server 2005에서는 해당 계획이 프로시저 캐시에서 에이징되지 않는 한 두 번째 실행부터는 첫 번째 실행의 실행 계획을 재사용합니다. 준비/실행 모델은 여전히 다음과 같은 이점을 제공합니다.

  • 식별 핸들로 실행 계획을 찾는 것은 SQL 문을 기존 실행 계획과 비교하는 알고리즘보다 더 효율적입니다.
  • 응용 프로그램이 실행 계획이 만들어지고 재사용되는 시기를 제어할 수 있습니다.
  • 준비/실행 모델은 이전 버전의 SQL Server를 비롯한 다른 데이터베이스로 이식 가능합니다.

이전 버전의 SQL Server에서 준비 및 실행

SQL Server 6.5 및 이전 버전에서는 준비/실행 모델을 직접 지원하지 않습니다. 그러나 SQL Server ODBC 드라이버는 다음과 같이 저장 프로시저를 사용하여 준비/실행 모델을 지원합니다.

  • 응용 프로그램이 SQL 문을 준비하도록 요청했을 때 ODBC 드라이버는 CREATE PROCEDURE 문에 SQL 문을 포함시킨 다음 이것을 SQL Server에 보냅니다.
  • 실행 요청 시, ODBC 드라이버는 SQL Server가 생성된 저장 프로시저를 실행하도록 요청합니다.

SQL Server 6.5 및 SQL Server 6.0에서 생성된 저장 프로시저는 tempdb에 저장된 임시 저장 프로시저였습니다. SQL Server 4.21a 및 이전 버전에서는 임시 저장 프로시저를 지원하지 않으므로 드라이버가 현재 데이터베이스에 저장된 일반 저장 프로시저를 생성했습니다. SQL Server 2000에 포함된 Microsoft OLE DB Provider for SQL Server 및 SQL Server ODBC 드라이버는 SQL Server 6.5, SQL Server 6.0 및 SQL Server 4.21a에 연결될 때 이러한 동작을 수행합니다.

참고 항목

개념

실행 계획 캐싱 및 다시 사용
매개 변수 및 실행 계획 재사용

도움말 및 정보

SQL Server 2005 지원 받기