SQL_쿼리 최적화

윤일권·2024년 2월 18일
0

DataBase

목록 보기
5/5
인턴을 시작하며 쿼리 작성하는 일이 부쩍 늘어났다.
어느날 여러 테이블을 조인해서 조회를 하는 일이 생겨났고,
조회하는 데 많은 시간을 할애하게 되었다.
인덱스를 사용하면 좋지만, 쿼리를 최적화하여 응답시간을 줄여야했다.
그러던 도중 with를 통해 서브쿼리를 없애고 시간을 단축할 수 있었다.
이 일 직후 쿼리 최적화와 쿼리 시간 복잡도(?)라는 것이 있을까? 하며 관심을 가지게 되어 포스팅을 해보려 한다.
<여러 쿼리 튜닝 중에서 WITH, SELECT, 서브쿼리, JOIN, GROUP BY에 대한 부분만 블로깅 하였습니다.>

쿼리 최적화

데이터베이스 시스템에서 쿼리의 실행 시간을 최소화하고, 시스템 자원 사용을 최적화하여 전반적인 성능을 향상시키는 과정

WITH, SELECT, 서브쿼리, JOIN, GROUP BY
SELECT & 서브쿼리

  • 데이터를 검색할 때 사용하는 SELECT문은 쿼리의 성능을 최적하하기 위해 필요한 데이터만 선택적으로 가져와야한다.
  • 서브 쿼리는 특정 조건에 맞는 데이터 집합을 필터링하거나, 복잡한 데이터 집합을 생성하는데 유용
  • 너무 많거나 복잡한 서브쿼리는 쿼리의 실행 속도를 저하시킨다.
  • 가능하면 JOIN, UNION, EXISTS등을 사용할 것을 권장.
  • 서브쿼리를 사용할 경우 서브쿼리의 결과를 캐시하여 재사용하는 것이 좋음

JOIN

  • JOIN 연산자는 두 테이블 이상을 연결하여 관련 데이터를 조합하는 데 사용.
  • 인덱스가 잘 구성된 경우 -> 조인 조건이 최적화 되어 있다면 DB성능을 크게 향상
  • INNER JOIN은 모든 행이 일치하는 경우에만 검색하므로 성능이 뛰어남
  • OUTER JOIN은 일치하지 않는 행도 검색가능 -> 하지만 INNER JOIN보다 성능이 떨어질 수 있음.
  • JOIN의 순석를 최적화하여 성능 향상하는 것이 좋음.

GROUP BY

  • GROUP BY절은 데이터를 그룹화하고, 각 그룹에 대해 집계 함수를 적용할 때 사용
  • 데이터 분석에 유용하지만, 대량의 데이터에 대해 그룹화를 수행하면 성능 저하가 일어날 수 있음.
  • 적절한 인덱스를 사용 및 필요 데이터만 그룹화해야 한다.

WITH

  • 복잡한 쿼리를 단순화하고, 재사용 가능한 쿼리 세그먼트를 만드는데 유용
  • CTE는 임시 결과 집합을 정의 -> 이를 쿼리 내의 다른 부분에서 참조가능
  • 코드의 가독성을 높이고, 유지 보수를 용이하게 하며, 중복을 줄임
  • CTE는 임시 테이블과는 다르게 매번 참조될때마다 재계산되기 때문에 성능 저하의 원인이 될 수 있음.

그 외 쿼리 최적화
인덱싱: 적절한 인덱스 구성은 데이터 검색 속도를 크게 향상시킬 수 있습니다.
사용 빈도가 높은 컬럼에 인덱스를 적용하고, 쿼리 성능 분석 도구를 사용하여 인덱스의 효율성을 주기적으로 검토합니다.
데이터 파티셔닝: 대량의 데이터를 효율적으로 관리하기 위해 데이터를 논리적으로 분할합니다. 이는 쿼리 성능을 향상시키고, 데이터 관리를 용이하게 합니다.
캐싱: 자주 조회되는 데이터나 계산 결과를 캐시에 저장하여, 데이터베이스 부하를 줄이고 응답 시간을 단축합니다.

profile
생각하는 개발자가 되겠습니다!!

0개의 댓글