카테고리 없음

MSSQL - SQL 튜닝 (실용적이면서, 가볍게 시도해 볼 방법들)

초심으로 2020. 10. 22. 19:44

728x90

SQL 성능 최적화를 위한 다양한 기법과 기술에 대한 이해, 그리고 많은 경험을 필요로 합니다. 하나하나 정확한 기능과 원리를 알고 사용하면 좋겠지만, 충분한 여유가 없는 경우 가볍게 시도해 볼 수 있는 실용적인 방법을 소개합니다. 

 

1. SELECT 문인 경우 WITH (NOLOCK) 추가

SELECT TA.COL1, TB.COL2

FROM TBL_A AS TA		WITH (NOLOCK)
INNER JOIN TBL_B AS TB		WITH (NOLOCK)
	ON TA.COL1 = TB.COL2

 

2.  무작정 OPTION (FORCE ORDER) 구문 추가 

SELECT TA.COL1, TB.COL2

FROM TBL_A AS TA
INNER JOIN TBL_B AS TB
	ON TA.COL1 = TB.COL2
    
OPTION (FORCE ORDER)

 

3. 예상실행계획(Ctrl + L) 을 확인하여, 추천하는 인덱스를 추가해보기 (누락된 인덱스 세부 정보를 눌러 간편하게 추가 가능)

4. 예상 실행 계획을 통해 비용이 많이 드는 부분을 확인하여 그 부분에 해당하는 테이블 중심으로 index 강제 적용하기

   (당연히 설정된 Index 를 확인해야겠죠?)

SELECT TA.COL1, TB.COL2

FROM TBL_A AS TA		WITH (index = idx_TBLA_colA)
INNER JOIN TBL_B AS TB		WITH (NOLOCK)
	ON TA.COL1 = TB.COL2
WHERE   TA.COL1 = 'AAA'
	AND TA.COL2 = 'BBB'

 

5. 통계 정보 확인하여 Scan 이 높은 Table 을 대상으로 튜닝

SET STATISTICS TIME ON;
SET STATISTICS IO ON;

SELECT TA.COL1, TB.COL2
FROM TBL_A AS TA		
INNER JOIN TBL_B AS TB	
	ON TA.COL1 = TB.COL2

 

6. 최대 병렬 처리 수준을 올려본다.

- 실행계획이 자동으로 변경되는 경우가 많으며, 서버 스펙이 따라줘야함..

 

반응형

SQL 성능 최적화를 위해 여러 가지 중요한 상식들을 적용할 수 있습니다. 첫째, WHERE 절에 인덱스가 포함된 컬럼을 사용하면 쿼리 성능이 크게 향상됩니다. 둘째, 인덱스 컬럼에는 가급적 동등 연산자(=)를 사용하여 데이터베이스가 인덱스를 효과적으로 활용할 수 있도록 합니다. 셋째, 인덱스 컬럼을 변형하면 인덱스가 적용되지 않으므로 주의해야 합니다. 또한, HAVING과 DISTINCT는 불필요한 비용을 초래할 수 있으므로 사용을 자제하고, IN과 NOT IN 대신 EXISTS와 NOT EXISTS를 사용하는 것이 효율적입니다. 마지막으로, UNION보다 UNION ALL을 사용하면 중복 검사를 피할 수 있어 성능이 개선됩니다.

7. 기타 잡다한 Query 성능 관련 상식들 적용 가능한지 확인한다.

1) WHERE 조건에 Index 가 포함된 컬럼 사용
2) 인덱스 컬럼 가급적 동등 연산자(=)를 사용
3) 인덱스 컬럼 변형하면 인덱스 적용안됨 
5) HAVING 을 자제
6) DISTINCT는 자제
7) IN, NOT IN 대신 EXISTS 와 NOT EXISTS를 사용 (SELECT 1 FROM TBL_A WHERE COL_A = 'AAA') 
8) UNION 대신 UNION ALL 

 

참고로, NOLOCK 힌트는 데이터 읽기를 빠르게 하지만 데이터의 일관성이 보장되지 않을 수 있어 신중한 사용이 필요합니다. FORCE ORDER 옵션은 조인 순서를 지정해 예상치 못한 실행 계획으로 인한 성능 저하를 방지합니다. 예상 실행 계획을 통해 인덱스를 추천받고 추가하면 쿼리 성능을 향상시킬 수 있습니다. 인덱스 강제 적용은 테이블 스캔을 줄여 효율적인 데이터 조회를 가능하게 합니다.

또한, 통계 정보 분석을 통해 데이터베이스의 IO와 CPU 사용량을 확인하고, 스캔이 많은 테이블을 중심으로 최적화를 진행할 수 있습니다. 최대 병렬 처리 수준을 조정하면 실행 계획이 변경되어 성능이 향상될 수 있지만, 서버 스펙에 따라 효과가 다를 수 있습니다. 기타 성능 관련 상식으로는 WHERE 절에 인덱스가 포함된 컬럼을 사용하고, 인덱스 컬럼에 동등 연산자를 사용하며, HAVING과 DISTINCT의 사용을 자제하는 것이 있습니다. 이러한 방법들은 SQL 쿼리의 성능 개선에 중요한 역할을 합니다.

반응형