[DB] Query Optimizing 팁

Woong·2021년 12월 1일
0

DB

목록 보기
7/16

SELECT.. WHERE 쿼리를 빠르게 하기 위해 index를 설정할 것

  • OR 연산은 성능 저하의 원인이 됨. 가급적 사용하지 않기

    (a > 5 AND b = 10) OR (a > 7 AND b = 10)
    a> AND b = 10

함수 호출은 최소화

  • 함수 호출을 위해 전체 테이블을 풀스캔하며 비효율적인 연산을 할 수 있음

테이블 full scan을 최소화

  • 특히 큰 테이블의 경우 full scan 으로 인한 비용이 큼

주기적으로 ANALYZE TABLE 문 호출하기

  • 테이블 통계 상태를 최신화하여, 옵티마이저가 효율적인 실행 계획을 구성하도록 도움

이해하기 어려운 쿼리 사용을 피하기

  • 옵티마이저가 자동으로 최적화하를 못할 수 있음

EXPLAIN plan 을 읽고 Index, where, join 등을 조절하기

반복 사용되는 쿼리를 위해 buffer pool, query cache 사이즈 조절

LOCK 이슈 처리

  • 동시에 테이블에 접근하는 서로 다른 세션에 영향
  • locking 옵션 체크
  • SELECT 시 lock 을 거는지 확인

B-Tree index 는 range 조건에 사용 가능

  • =, IN, <, >, <=, >=, BETWEEN, LIKE
    • 단, LIKE는 뒤에 와일드카드 붙을 때에만

Hash Index 는 equal 조건에 사용 가능

  • =, IN

OR 쿼리는 single range scan 에 사용 불가

Index Merge Optimization

  • 인덱스를 이용하여 테이블을 읽는 경우 대부분은 하나의 인덱스만 활용할 수 있다.
  • 인덱스 머지 실행계획을 사용하면 하나의 테이블에 대해 2개 이상의 인덱스를 이용하게 된다.

CREATE INDEX idx1 ON A (a1);
CREATE INDEX idx2 ON A (a2);
SELECT FROM A WHERE a1 = 3 AND a2 = 4; // index scans & intersection
SELECT
FROM A WHERE a1 = 3 OR a2 = 4; // index scans & union

Hash Join Optimization

  • Join 조건에 Index 가 없을 때 Hash Join 이 일어날 수 있음.

Outer Join 이 nested loop join 을 사용

0개의 댓글