[DB] Query Optimizing

Woong·2021년 12월 1일
0

DB

목록 보기
6/16

Push Down Selections

  • Join 되는 테이블의 데이터 양을 직접 줄인다.

SELELCT a1, b2 FROM A, B WHERE a3 = b1 AND a2 = 5 AND b3 = 7

SELELCT a1, b2 FROM
(SELECT FROM A WHERE a2 = 5),
(SELECT
BROM B WHERE b3 = 7)

WHERE a3 = b1

Push Down Projections

  • Join 시 테이블의 특정 컬럼만 사용하여 데이터양을 줄인 후 Join

SELELCT a1, b2 FROM A, B WHERE a3 = b1

SELELCT a1, b2 FROM
(SELECT a1, a3 FROM A),
(SELECT b1, b2 BROM B)

WHERE a3 = b1

Push Down Group-bys

  • TQ (Table Queue 에 전달하기 전 Group by 를 미리 실행한다.
  • Group By 를 먼저 수행하면 데이터양을 대폭 줄일 수 있어 효율 증대

SELELCT a2, SUM(a1) FROM A, B WHERE a2 = b1 GROUP BY a2

SELELCT a2, SUM(a1) FROM (SELECT a2, SUM(a1) FROM A GROUP BY a2), B WHERE a2 = b1 GROUP BY a2

Remove subquries

  • subquery 대신 where 문 안에서 처리하기
  • subquery 로 인한 결과에서는 index를 사용할 수 없기 때문
  • 서브쿼리 결과물에선 b1 에 대한 index 사용 불가
    SELECT a1 FROM A WHERE a3 IN (SELECT b1 FROM B WHERE b3 = 4)
  • b1 에 대한 index를 사용할 수 있음
    SELECT a1 FROM A, B WHERE a3 = b1 AND b3 = 4

작은 테이블부터 Join

  • Join 순서도 중요함
  • 중간 Join 결과가 더 작은 쪽이 유리
  • A⋈B⋈C 를 조인할 때 (A⋈B)⋈C 와 A⋈(B⋈C) 중 더 효율적인 것은?
    • (A⋈B) 와 (B⋈C) 중 더 A⋈B 가 더 작다면 (A⋈B)⋈C 가 유리
  • 비용이 cost(A⋈B) + cost((A⋈B)⋈C) > cost(B⋈C) + cost(A⋈(B⋈C)) 임.
    • cost(A⋈B) > cost(B⋈C) 이므로.

0개의 댓글