susinlee 님의 블로그

쿼리 작성 가이드 및 최적화 본문

코드카타/SQL, Pandas

쿼리 작성 가이드 및 최적화

susinlee 2025. 3. 26. 10:54

쿼리 작성 가이드

  • 현재 보고 싶은 지표는 무엇인가?, 이쿼리를 작성하는 목표는 무엇인가?
  • 해당 지표는 어덯게 계산해야 할까? 데이터의 기간은 어떻게 될까
  • 해당 지표를 계산하기 위해 어떤 테이블을 확인해야 할까? Join 활용할 Key는 무엇인가?
  • 하나의 테이블에서 원하는 정보를 모두 추출할 수 있을까? 혹은 여러 테이블을 사용해야 할까
  • 데이터를 파악할 때 주의해야 하는 내용은?
  • 위 내용을 주석으로 설정한 후 쿼리 작성하는 습관 가지기

회사에서 쿼리 작성하는 흐름

  1. 쿼리 체크 리스트를 작성한다.
  2. 보고 싶은 지표를 구체화한다
    • 사내에 이미 해당 지표를 구하는 쿼리가 있는지 찾아본다. 있으면 바로 쿼리를 실행하고 쿼리를 분석해보자
  3. 보고 싶은 지표가 있는 데이터가 있는 테이블 찾기
    • 하나의 테이블에서 모든 데이터가 나올 것 같은 경우 - 바로 쿼리를 짠다
    • 여러 테이블에서 데이터를 연결해야 할 것 같은 경우 - 어떻게 연결할지 고민한다
  4. 구한 결과값이 정말 맞는지 확인한다(데이터 정합성 체크) - 원본 데이터를 하나씩 비교해보는 방법도 있고 다양한 방법이 존재한다
  5. 쿼리를 더 효율적으로 만들 방법을 고민한다(+ 가독성)

쿼리 최적화 (아마존, 빅쿼리)

 

1. ORDER BY 최적화

 

 

2. JOIN 최적화

두 테이블을 Join할 때 왼쪽에 큰 테이블을 지정하고 오른쪽에 작은 테이블을 지정

 

 

3. GROUP BY 최적화

  • 카디널리티가 높은 컬럼을 우선적으로 정렬
    • 분산이 균등한 컬럼을 먼저 배치하면 병렬 처리가 최적화
  • 숫자 데이터를 사용하여 연산 최적화
    • 문자열보다 숫자가 비교 연산 속도가 빠르고 메모리 사용이 적음
  • SELECT 절에서 불필요한 컬럼 제외
    • GROUP BY 수행시 필요한 컬럼만 선택하면 메모리 사용량이 줄어듦

 

4. LIKE 최적화

문자열 열에서 여러 값을 필터링할 때는 일반적으로 LIKE 보다 여러 번 정규표현식을 사용하는 것이 좋다.

 

 

5. 근사 함수 사용

 

 

 

6. SELECT * 사용 자제

  • 데이터 미리보기 사용
  • SELECT * 쿼리에 LIMIT 절을 적용해도 쿼리가 읽는 데이터 양은 달라지지 않음. 하나 이상의 열을 결과에서 제외하려면 SELECT * EXCEPT 컬럼명 을 사용.

 

7. JOIN 전 데이터 줄이기

최적의 쿼리를 작성하려면 필요한 데이터만 먼저 필터링하고, 이후에 조인하는 방식이 일반적으로 가장 성능이 좋다

 

 

8. WHERE 절 사용

쿼리가 반환하는 데이터 양을 제한하려면 WHERE 절 사용

STRING 또는 BYTE 보다 BOOL, INT, FLOAT, DATE 타입이 더 빠르다.

가능한 경우 이러한 데이터 유형 중 하나를 가지는 열을 사용하여 쿼리에서 반환되는 데이터 양을 줄이자