DB

[MSSQL] HINT 사용법

조셉LEE 2015. 4. 9. 09:05
728x90
반응형

보통 아래의 힌트들은 FROM 절 의 테이블 이름 뒤에 붙여서 특정 테이블을 접근하는것을 변경하거나 Query문의 제일 하단에 OPTION() 구문을 이용하여 Query문의 실행 계획을 조절 할수 있다.

WITH (INDEX( <Index_Name>))

 From 절 뒤에 붙여서 사용하는 이 힌트 문은 테이블에 접근하기 위해 사용되는 인덱스를 특정 인덱스로 지정할수 있다. 그렇지만 별로 권장하지는 않는 만약 인덱스가 재 생성 되거나 자신이 지정한 이름과 다르게 인덱스가 변경될 경우에는 심각한 성능상의 영향을 줄수 있다.

사용법 

SELECT * FROM TABLE_NAME WITH(INDEX(<table_name_ix>))

WITH (INDEX(0))

From 절 뒤에 붙여서 사용하는 이 힌트 구문은 테이블에 접근하는데 Full Scan을 하도록 한다.

사용법 

SELECT * FROM TABLE_NAME WITH(INDEX(0))

WITH (NOLOCK) 

From 절 뒤에 붙여서 사용하는 이 힌트는 읽기 락 없이 특정 테이블을 읽게 만든다.. 일반적으로 SQL Server 2000 에서는 무조건 with(nolock) 없이 select를 할경우 해당 테이블에 read lock이 발생되어 만약 실 운용 DB의 경우에는 장애가 발생하는등의 심각한 오류가 발생할수도 있다. 될수 있는한 bottleneck등을 줄이기 위해서 대용량 데이터 select 시에는 꼭 사용하는 것이 좋다.

사용법

SELECT * FROM TABLE_NAME WITH(NOLOCK)

LOOP and HASH 

From 문내의 JOIN 에 각각 사용되는 두개의 힌트는 JOIN시에 지정된 방법으로 join 을 하도록 한다. 이 힌트들은 새로운 스타일의 JOIN 키워드 이다.

 사용법

SELECT * FROM TABLE A INNER HASH JOIN TABLE B ON A.XX = B.XX

SELECT * FROM TABLE A INNER LOOP JOIN TABLE B ON A.XX = B.XX 

OPTION(LOOP JOIN) 

이 힌트는 질의문의 마지막에 붙으며 Nested loops를 따르는 모든 joins 들을 합친다.

사용법

SELECT * FROM TABLE WHERE 1=1 OPTION(LOOP JOIN)

OPTION(FORCE ORDER)

이 힌트는 질의문의 마지막에 붙으며 from 절 내에 나열된 같은 순서에 위치하는 모든 조인들의 테이블들을 합친다.

SELECT * FROM TABLE WHERE 1=1 OPTION(FORCE ORDER)

728x90
반응형