SAP ABAP에서 MSSQL HINT 구문 중 하나인 FORCESEEK에 대해 알아보겠습니다.FORCESEEK 힌트는 쿼리 최적화 프로그램이 인덱스 검색 작업만 사용하도록 강제하는 테이블 힌트입니다.테이블 힌트는 DML(데이터 조작 언어) 문의 기간 동안 쿼리 최적화 프로그램의 기본 동작을 재정의하는 데 사용됩니다.쿼리 최적화 프로그램은 일반적으로 쿼리에 대해 최상의 실행 계획을 선택하므로 힌트는 숙련된 개발자나 데이터베이스 관리자가 최후의 수단으로만 사용하는 것이 좋습니다.
FORCESEEK 힌트는 클러스터형 인덱스와 비클러스터형 인덱스 검색 작업에 모두 적용됩니다. FORCESEEK 힌트를 사용하면 인덱스의 특정 열에 대해 검색 범위를 지정할 수도 있습니다. 이 경우 인덱스 값과 인덱스 열 이름을 괄호 안에 지정해야 합니다.
예를 들어 다음과 같은 쿼리를 보겠습니다.
SELECT * FROM Sales.SalesOrderDetail AS sod WITH (FORCESEEK)
WHERE sod.SalesOrderID = 43659
이 쿼리는 Sales.SalesOrderDetail 테이블에 대해 FORCESEEK 힌트를 사용하여 인덱스 검색 작업을 강제 실행합니다.
쿼리 최적화 프로그램은 PK_SalesOrderDetail_SalesOrderID_SalesOrderDetailID라는 클러스터형 인덱스를 사용하여 테이블의 행을 검색합니다. 이 인덱스는 SalesOrderID와 SalesOrderDetailID라는 두 개의 열로 구성되어 있습니다. 쿼리에서는 SalesOrderID 열에 대한 조건만 지정했으므로 쿼리 최적화 프로그램은 인덱스의 첫 번째 열에 대한 검색 범위를 사용합니다.
이제 다음과 같이 쿼리를 수정해 보겠습니다.
SELECT * FROM Sales.SalesOrderDetail AS sod WITH (FORCESEEK(PK_SalesOrderDetail_SalesOrderID_SalesOrderDetailID(SalesOrderDetailID)))
WHERE sod.SalesOrderID = 43659
이 쿼리는 FORCESEEK 힌트에 인덱스 값과 인덱스 열 이름을 지정하여 인덱스의 특정 열에 대한 검색 범위를 강제 실행합니다. 쿼리 최적화 프로그램은 여전히 PK_SalesOrderDetail_SalesOrderID_SalesOrderDetailID라는 클러스터형 인덱스를 사용하지만 인덱스의 두 번째 열인 SalesOrderDetailID에 대한 검색 범위를 사용합니다. 쿼리에서는 SalesOrderID 열에 대한 조건만 지정했지만 힌트에 의해 인덱스의 다른 열에 대한 검색 범위가 강제되었습니다. 이 경우 쿼리 최적화 프로그램은 인덱스의 첫 번째 열에 대한 조건을 적용하지 않고 모든 인덱스 키를 검색한 후 페치를 수행하여 남은 열을 검색합니다.
FORCESEEK 힌트를 사용할 때 주의할 점은 다음과 같습니다.
- FORCESEEK 힌트는 쿼리 최적화 프로그램이 유효한 계획을 생성할 수 없는 경우 오류를 발생시킬 수 있습니다. 예를 들어 쿼리에서 참조하는 모든 열이 인덱스에 포함되지 않은 경우 오류가 발생할 수 있습니다.
- FORCESEEK 힌트는 쿼리의 성능을 향상시킬 수도 있고 저하시킬 수도 있습니다. 인덱스 검색 작업이 인덱스 검색 작업보다 더 효율적인 경우에는 FORCESEEK 힌트를 사용하지 않는 것이 좋습니다. 쿼리의 성능을 평가하고 힌트를 사용하기 전에 힌트를 사용하지 않은 경우와 비교해 보는 것이 좋습니다.
- FORCESEEK 힌트는 쿼리의 결과를 변경하지 않습니다. 쿼리의 결과를 변경하려면 다른 힌트를 사용해야 합니다. 예를 들어 NOLOCK 힌트는 쿼리가 잠금을 걸지 않고 더티한 데이터를 읽도록 하여 쿼리의 결과에 영향을 줄 수 있습니다.
이상으로 SAP ABAP에서 MSSQL HINT 구문 중 FORCESEEK에 대해 알아보았습니다. FORCESEEK 힌트는 쿼리 최적화 프로그램이 인덱스 검색 작업만 사용하도록 강제하는 테이블 힌트입니다. 인덱스의 특정 열에 대한 검색 범위를 지정할 수도 있습니다. 하지만 FORCESEEK 힌트를 사용할 때는 쿼리의 성능과 결과에 영향을 주는 여러 요인을 고려해야 합니다. 힌트는 숙련된 개발자나 데이터베이스 관리자가 최후의 수단으로만 사용하는 것이 좋습니다.
참고자료
How to integrate SQL Server specific hints in ABAP
First published on MSDN on Aug 31, 2011 Working on a few Proof of Concepts this year where customers moved their SAP landscapes from Oracle or DB2 to SQL..
techcommunity.microsoft.com
//SAP ABAP에서의 구문
%_HINTS MSSQLNT 'TABLE &TABLE& INDEX([VBAK~0]), FORCESEEK'