춘식이2
업글이✧
춘식이2
전체 방문자
오늘
어제
  • 분류 전체보기
    • Data Analysis
    • Python
    • SQL
    • Statistics

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • rank함수
  • NVL
  • 데이터디스커버리
  • 데이터분석
  • pv
  • ifnull
  • window함수
  • uv
  • SQL
  • Codility
  • coalesce
  • NULL
  • excel
  • sql튜닝
  • python3
  • hackerrank
  • Apriori
  • 장바구니분석
  • Jupyter
  • Python

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
춘식이2

업글이✧

SQL

[SQL튜닝] 효율이 좋은 쿼리 (대용량 데이터 처리)

2022. 8. 30. 19:17

오늘은 대용량 데이터를 추출시

가장 중요한 성능이 좋은 쿼리

메모리를 덜쓰고,  빠르게 데이터를 추출하는 SQL 쿼리에 대해서 알아보겠습니다.


 

SQL 쿼리를 효율적으로 짜는 것은 무엇일까요?

 

쿼리를 잘짠다?
= 빨리 돈다, 메모리를 덜 쓴다


 빨리돌고 메모리를 덜 쓰려면?
= 필터링을 많이 한다
= join/group by하는 데이터는 최소한으로 한다

 

그렇습니다. 

대용량의 데이터일 수록 데이터를 "작게"만들어야 하는 것이 중요해집니다.


대용량 데이터 SQL 튜닝의 핵심

데이터를 작게 만든다

 


1. 데이터를 작게 만들기 

  • 최대한 데이터를 한번에 잘라낼 수있게
  • 작은 데이터가 join 이되고 group by 가 될 수있도록



2. 두개 이상 테이블 join시, "join 전"에
where/group by 등의 조건을 각각 테이블에 넣기

  • join 과, group by의 성능이 나아질 수있다
  • 각 테이블에서 미리 group by하고 조인하기



3. join 을 한번에 많이하면 DB적으로 성능에서 좋지 않다

- 예를들어 3개 테이블이 조인이 필요하다면

3개 테이블을 한번에 하는 것보다 2개 먼저하고,
후에 메인테이블과 한번 더 하는 것이 효율적일 수도 있습니다.

 

 


 

참고1. DBMS가 가장 힘들어하는 것이 JOIN 입니다

  • 따라서 필터를 하고 데이터를 많이 줄이고
  • 필요한 데이터만 조인해서 붙여넣고 결과를 내는 것이 중요합니다



참고2. 또한, 쿼리가 짧다고 무조건 좋은 것만도 아닙니다. ('효율'의 관점에서)

  1. WINDOW Function 같은 경우에는 Hive에서 돌아갈때 굉장히 느립니다.
    • rank함수를 사용하게되면, 전체 데이터를 한번 sorting을 해야하는 부분이있어서,
      메모리관점에서 부하가 높고, 시간이 오래 걸리는 작업입니다.
    • 그래서 rank함수는 실무에서 많이 안쓰일수도 있어요.
      많이 느려서요. (회바회, 부바부 이겠지만요!)

  2. 따라서 rank 함수보다 데이터를 order by로 정렬하고 limit로 원하는만큼 잘라 오는것이 쿼리는 더 길어지더라도, 효율적인 측면에서는 더 좋을 수도 있어요
    • limit를 사용하면 100번째에서 중지를 할수 있지만,
      rank하게되면 전체 데이터를 sorting하니깐요
    • 따라서 쿼리가 길어지더라도, 이해하기 쉽고 직관적이고, 데이터가 빨리 나올수있는 구조라면,
      orderby와 limit를 사용한 쿼리가
      window 펑션을 쓴 짧은 쿼리보다 더 좋을 수도 있습니다.

 

 



'SQL' 카테고리의 다른 글

[SQL] 테이블 생성하기(DROP DATABASES, CREATE DATABASE)  (0) 2022.10.06
[SQL] NULL처리 (IFNULL, NVL, ISNULL, COALESCE, NULLIF )  (0) 2022.09.29
[SQL] update, set - 테이블 내 데이터 값 변경하기  (0) 2022.08.30
Mysql 에 csv 파일 불러오기  (0) 2022.08.15
[SQL튜닝] SQL 성능 튜닝 기초 (INDEX, Cardinality, 점조건, 선분조건)  (0) 2022.06.28
    'SQL' 카테고리의 다른 글
    • [SQL] 테이블 생성하기(DROP DATABASES, CREATE DATABASE)
    • [SQL] NULL처리 (IFNULL, NVL, ISNULL, COALESCE, NULLIF )
    • [SQL] update, set - 테이블 내 데이터 값 변경하기
    • Mysql 에 csv 파일 불러오기
    춘식이2
    춘식이2

    티스토리툴바