보통 아래의 힌트들은 FROM 절 의 테이블 이름 뒤에 붙여서 특정 테이블을 접근하는것을 변경하거나 Query문의 제일 하단에 OPTION() 구문을 이용하여 Query문의 실행 계획을 조절 할수 있다.
From 절 뒤에 붙여서 사용하는 이 힌트 문은 테이블에 접근하기 위해 사용되는 인덱스를 특정 인덱스로 지정할수 있다. 그렇지만 별로 권장하지는 않는 만약 인덱스가 재 생성 되거나 자신이 지정한 이름과 다르게 인덱스가 변경될 경우에는 심각한 성능상의 영향을 줄수 있다.
사용법
SELECT * FROM TABLE_NAME WITH(INDEX(<table_name_ix>))
From 절 뒤에 붙여서 사용하는 이 힌트 구문은 테이블에 접근하는데 Full Scan을 하도록 한다.
사용법
SELECT * FROM TABLE_NAME WITH(INDEX(0))
From 절 뒤에 붙여서 사용하는 이 힌트는 읽기 락 없이 특정 테이블을 읽게 만든다.. 일반적으로 SQL Server 2000 에서는 무조건 with(nolock) 없이 select를 할경우 해당 테이블에 read lock이 발생되어 만약 실 운용 DB의 경우에는 장애가 발생하는등의 심각한 오류가 발생할수도 있다. 될수 있는한 bottleneck등을 줄이기 위해서 대용량 데이터 select 시에는 꼭 사용하는 것이 좋다.
사용법
SELECT * FROM TABLE_NAME WITH(NOLOCK)
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
이 힌트는 질의문의 마지막에 붙으며 Nested loops를 따르는 모든 joins 들을 합친다.
사용법
SELECT * FROM TABLE WHERE 1=1 OPTION(LOOP JOIN)
이 힌트는 질의문의 마지막에 붙으며 from 절 내에 나열된 같은 순서에 위치하는 모든 조인들의 테이블들을 합친다.
SELECT * FROM TABLE WHERE 1=1 OPTION(FORCE ORDER)
'DB' 카테고리의 다른 글
트랜잭션 분리 (0) | 2024.02.19 |
---|---|
[MSSQL] 시작과 종료 일자의 날짜와 DATA 가져오기 (0) | 2024.02.18 |
ROW_NUMBER() / RANK() 사용법 및 차이점 (0) | 2024.02.16 |
컬럼에 IDENTITY 지정후 Data INSERT 할때 (0) | 2024.02.14 |
Table 컬럼 추가 및 삭제 변경 (0) | 2024.02.13 |