DEV/DB

쿼리 성능 높이는 법

땅콩둘기 2024. 10. 22. 14:59
반응형

내가 들었던 면접 질문들 하나씩 정리 중

지금 Data 하고 있다고 하니까 물어본 거 같긴 한데 사실 큰 경험은 없다.

요즘은 솔직히 서버도 좋고 DB 성능도 좋아서 엄청난 차이가 있지는 않은 것 같지만,,!

그렇지만 내가 경험했던 거 포함해서 하나씩 적어보겠숨

 

1. 인덱스 사용

인덱스를 빼고는 최적화를 논할 수가 없죠

인덱스(Index) 란!

검색 속도를 올려주는 자료구조로 일종의 목차를 생성하는 개념이다.
특정 컬럼에 대한 인덱스를 생성하면 해당 컬럼의 데이터들을 정렬해서 별도의 메모리 공간에 물리적 주소와 함께 저장하게 됩니다. 해당 컬럼이 포함된 WHERE 조건문을 사용하여 쿼리를 날리면 옵티마이저에 의해 판단되어 생성된 인덱스를 타게 되어 물리적 주소를 찾아 데이터를 가져오기 때문에 검색 속도가 향상됩니다.

 

여기서 옵티마이저(Optimizer)는 SQL을 효율적으로 수행할 최적의 처리 경로를 생성해 주는 DBMS 내부의 핵심 엔진입니다.

그러므로 자주 조회되는 컬럼을 인덱스로 지정해 준다면 조회의 성능을 높일 수 있겠습니다.

 

2. 필요한 컬럼만 조회하기

SELECT * FROM TABLE 보다는 SELECT APT, ADDR FROM TABLE;

이런 식으로 필요한 컬럼만 조회해야 빠른 조회가 가능합니댜

3. 불필요한 조인 줄이기

조인 연산은 데이터베이스에서 시간이 가장 많이 드는 연산으로 조인만 줄여도 시간이 반으로 줄어들 수 있습니다.

그런데 서브쿼리를 무분별하게 사용하는 것보단 조인을 하는 게 좋은 방법이기도...🌸

4. 오라클 힌트사용

오라클인 경우 힌트 사용으로 옵티마이저에게 특정 실행계획을 줄 수 있습니다.

데이터 마트 개발하면서 이거를 제일 많이 사용한 거 같다

SELECT /* FULL (A) */
FROM TABLE A, TABLE B

이렇게 SELECT 절 옆에 힌트를 줘서 사용하게 되고 FULL을 적어줄 경우에는 특정 테이블을 FULL 테이블 스캔을 하게 된다.

FULL외에도 INDEX, NO_INDEX, FIRST_ROWS등과 같은 다른 힌트들도 있고 요리조리 바꾸다 보면 어느샌가 수행시간이 줄어든다. 다 알고 적절하게 써야한다는데..인생은 기세다..! 아는대로 넣어보면 된다.

 

5. 쿼리 다른 방법으로 짜보기

ㅎ ㅏ... 내가 쓴 열을 행으로 바꾸는 방법을 보면 알 수 있듯이

같은 결과를 내는데 어떤 함수를 사용하느냐에 따라서 수행시간에 엄청난 차이가 생길 수 있다.

함수를 적극적으로 활용해 보자

 

[SQL] 열을 행으로 바꾸는 방법 정리, CONECT BY LEVEL/UNION ALL/UNPIVOT

이걸로 일주일 고민한 사람의 UNPIVOT 포스팅 계좌번호 (ACCT_NO) 고객아이디 (CUST_NO) 대출종류1 금액 (LOAN_COST1) 대출종류2 금액 (LOAN_COST2) 대출종류3 금액 (LOAN_COST3) 대출종류 4 금액 (LOAN_COST4) 대출종류

selgii.tistory.com

 

그럼 여기 까집니다.

모쪼록 좋은 SQL 작성하세요

 

출처 : https://itiformation.tistory.com/m/entry/Oracle-쿼리-속도-개선-방법

         https://velog.io/@bagt/DB-Index에-대하여 

 

 

반응형