Dev/Database

[DB/SQL] 쿼리 튜닝하는법, 오라클 쿼리튜닝, MSSQL 쿼리 튜닝, 쿼리 성능 개선하는법

알굼 2024. 6. 11. 11:42
반응형

쿼리 성능이 나오지 않을때, 기본적으로 확인할 수 있는 쿼리 개선방법이다.

 

1. INNER, OUTER JOIN 있을 때 무조건 OUTER JOIN을 마지막에 걸기


2. 쿼리에서 데이터를 SELECT 해올 필요가 없는데 불필요한 조인 하는 경우 제거

SELECT A.COLMN1, B.COLMN2
FROM TABLE_A A INNER JOIN TABLE_B B ON A.COLMN1 = B.COLMN1
		INNER JOIN TABLE_C C ON A.COLMN2 = C.COLMN2
       		-- TABLE_C 의 데이터는 안가져오므로 불필요한 조인.이를 제거해야함.

 

3. 3개이상 테이블 조인할때, 테이블 작은 순서로 조인하기



4. 실행계획 확인하기 
 (1) Oracle의 경우, DBeaver 에서 Ctrl + Shift + E 로 실행계획보기를 할 수 있음. MSSQL 은 SSMS 설치해야함.
 (2) 실행계획에서 FULL 이 나오지 않더라도 인덱스 타지 않는 것들이 있음. 인덱스를 타게 만들어줘야 함.
      인덱스 타면 실행계획에서 INDEX (UNIQUE SCAN) , TABLE INDEX (BY INDEX ROWID) 이런식으로 나옴.
 (3) NESTED LOOP 없앨수 있나 확인



5. 인덱스 타는지 확인할 때는 JOIN 된 테이블의 JOIN 조건들이 인덱스로 생성되어있는지 확인하는 것. 

CREATE INDEX IDX_A01
ON TABLE_A(COLMN1, COLMN2. COLMN3);
SELECT A.*, B.* 
FROM TABLE_A A INNER JOIN TABLE_B B
		ON A.COLMN1 = B.COLMN1 
        	AND A.COLMN2 = B.COLMN2
WHERE A.COLMN1 = 'EXAMPLE';

 

인덱스의 작동 방식을 알고 있어야 함. 예를 들어, 인덱스가 A, B, C 컬럼으로 정의되어 있다면, 조인 조건이나 검색 조건에 A와 B 컬럼이 포함되어 있으면 인덱스를 사용할 수 있음. 인덱스는 왼쪽부터 순서대로 사용되기 때문에, A 컬럼 조건이 포함되지 않고 B, C 컬럼만 조건에 포함된 경우 인덱스를 사용할 수 없음. ※  조인 조건에서 A, B 컬럼이 사용되었다면 인덱스의 선행 컬럼을 잘 따르고 있기 때문에 인덱스를 사용함.

 

6. 인덱스 무조건 많은게 좋은게 아님. 
인덱스가 너무 많을 경우에 INSERT, DELETE, UPDATE 가 느려짐.

7. 필수 준비물

 (1) DBeaver > Window > Show View > 쿼리 관리자
 (2) DBeaver > SQL편집기 > 실행계획 보기 

반응형