[데이터베이스] 효과적인 쿼리 저장

James·2023년 7월 10일
0
post-thumbnail

효과적인 쿼리 저장


왜 필요한가 ?

  • 쿼리 저장은 데이터베이스의 성능과 효율성을 향상시키는 데 중요한 역할을 합니다.

    저장된 실행 계획을 재사용하고 최적화하는 것은 데이터베이스 시스템의 성능을 향상시키며, 자원 사용을 최적화하고 쿼리 실행 비용을 최소화하는 데 도움이 됩니다.

전략


1. 조건 컬럼에는 별도의 연산을 걸지 않는다.

WHERE PRICE + 100 < 200

WHERE PRICE < 100
  • 인덱스가 걸린 컬럼을 변경하면 인덱스를 그대로 사용할 수 없다.

  • 함수, 계산, 표현식은 인덱스 컬럼에 작성하지 말자


2. SELECT할 때는 필요한 연산만 가지고 온다.

SELECT * FROM student;

SELECT ID FROM student;
  • 많은 필드를 불러올 수록, 디비는 더 많은 로드를 부담한다.

  • 딱 사용할 필드만 가지고 온다.


3. WHERE절의 비교 컬럼 데이터 타입은 일치하는 것이 좋다.


4. SELECT DISTINCT, UNION DISTINCT와 같은 중복값을 제거하는 함수는 최소화 한다.

  • 중복값을 제거하는 연산은 시간이 오래 걸린다.

  • 해결 방법: 테이블의 크기를 최소화, EXISTS활용


5. LIKE사용 시, %를 STRING앞에 배치하지 않는다.

WHERE c.value LIKE "%Programming"

WHERE c.value LIKE "Web%" OR c.value LIKE "MobileProg%"

Web Programming과 Mobile Programming을 추출하고 싶은 경우

  • %는 FULL SCAN을 사용하며 인덱스를 타지 않는다.

  • 1번과 유사하다.


6. 3개 이상의 테이블을 inner 조인 할때는, 크기가 가장 작은 테이블을 먼저 배치한다.

  • 항상 통용되는 것은 아니다.

  • inner조인은 대부분 Query Planner에서 가장 효과적인 순서를 탐색해 inner join순서를 변경

    -> 실행 시간 차이 거의 없다.


7. 조인되는 건수가 작다면, 일반적인 조인 보다는 스칼라 서브 쿼리도 고려한다.

  • 스칼라 서브 쿼리는 함수와 같이 레코드당 하나의 값을 리턴

  • 건수가 작음 효과적. 건수가 많으면 성능 저하와 CPU사용률 높인다.


Reference & Additional Resources

profile
의미있는 성장의 태도, 긍정적인 사고를 지닌 Deveolper

0개의 댓글