분석함수 대체, 페이징

K·2022년 6월 20일
0

SQL BOOSTER

목록 보기
11/12

1. 분석함수 대신하기

1.1 분석함수 대신하는 방법

  • 서브쿼리, 인라인뷰, 셀프조인을 활용하면 분석함수를 대신할 수 있다.
  • 하나의 SQL을 다양한 방법으로 구현해보는것은 기술향상에 큰 도움이 된다.
  • 분석함수가 성능면에서는 가장 유리할수 있다.
  • 서브쿼리로 대신하기 : 스칼라서브쿼리로 동일테이블 참조하여 합계 구하기
  • 인라인뷰로 대신하기 : 동일테이블의 집계를 구하기위해 동일 테이블로 인라인뷰구현

1.2 PARTITION BY를 대신하기

  • 서브쿼리로 대신하기 상관서브쿼리(본문SQL의 값을 조건으로사용), 성능이 좋지는 않음
  • 인라인뷰로 대신하기 : GROUP 별로 인라인뷰를 생성해야하며, 성능도 좋지않고, SQL이 길어진다.

1.3 ROW_NUMBER를 대신하기

  • ROWNUM으로 대신하기

2. 페이징 처리 기술

  • 사용자의 화면에 한번에 많은데이터를 보여주기에는 DB, WAS,클라이언트까지 모두 성능의
    부담이 있다.
  • 이때 시스템 부담을 줄이면서 사용자가 한번에 볼 수 있는 만큼의 데이터만 보여주는 처리를 페이징이라고 한다.

2.1 페이징의 종류

  • WAS 페이징 : 모든 데이터를 가져와 WAS에서 페이징 처리를 하는 방법

  • DB 페이징 : 데이터베이스에서 페이징에 필요한 만큼의 데이터만 조회하는 방법
    조회에 필요한 데이터를 모두읽어 페이지에 필요한만큼 잘라서 WAS로보내는방법
    가장흔한방법, WAS부하없애는대신 DB에서 모든 부하를 받음.

  • DB-INDEX 페이징 : 인덱스를 이용해 페이징에 필요한 데이터만 정확히 읽어내는 방법
    인덱스를 이용해 필요한 데이터만 정확히 읽어내는방법
    인덱스와 ROWNUM을 활용해 구현
    필요한 데이터만 읽어내므로 가장 성능이 좋다.
    부분범위 처리 페이징 OR NO-SORT페이징이라 부를수도있다.

    2.2 DB 페이징

  • 페이징시에는 항상 SORT ORDER BY STOPKEY가 먼저 수행되고
    COUNT STOPKEY가 정상적으로 사용되었는지(순서중요)
    실행계획을 확인할 필요가있다.

  • ROWNUM은 조회되는 데이터에 1부터 차례대로 번호를 매긴다. 그러므로 1을 거치지 않고서 2나 3이 나올수없다.

    SELECT FROM TABLE WHERE ROWNUM =1 : 조회가능
    SELECT
    FROM TABLE WHERE ROWNUM =2 : 조회불가
    SELECT FROM TABLE WHERE ROWNUM <= 2 : 조회가능
    SELECT
    FROM TABLE WHERE ROWNUM >= 2 : 조회불가

2.3 DB-INDEX 페이징

  • DB-INDEX페이징을 구현하려면 SQL조건절뿐아니라 ORDER BY 컬럼까지 고려해야한다.
  • 인덱스컬럼 선정기준
    1. WHERE절에 조건으로사용된 컬럼을 복합인덱스의 선두컬럼으로 사용
      : 조건이 여러개면 등치(=)조건컬럼을 앞쪽에 범위조건을 뒤쪽에 놓는다.
    2. ORDER BY 에 사용된 컬럼을 1번에서 정의한 컬럼 뒤에 차례대로 위치
  • 실행계획에서 DB-INDEX페이징이 동작했는지 확인하는 항목
    1. INDEX RANGE SCAN DESCENDING(OR ASCENDING)오퍼레이션이 있어야한다.
      (상황에 따라서는 INDEX FULL SCAN이 나올 수 있다)
    2. 1번 항목에서, 페이징 건수만큼만 또는 약간 초과해서 A-Rows가 나와야한다.
      :ORDER BY나 조건절, 인덱스 구성에 따라 A-Rows가 페이징건수보다 높을 수 있다.
      :A-Rows가 최대한 페이징 건수에 가깝거나 비효율이 없어야한다.
    3. 1번항목 이후에 COUNT STOPKEY가 있어야 한다.

마무리

  • DB INDEX 페이징은 구현이 쉽지않다 시스템의 모든 SQL을 이렇게 개발하기도 쉽지않다
  • 시스템 성능에 큰 문제가 없다면 DB페이징 방식을 주로 이용하고, 많이 사용되는 화면에만 DB-INDEX페이징 기술을 사용 권장
profile
늙어가면서 기억을 남기는 개발자

0개의 댓글