[SQLP필기풀이]3장 인덱스 튜닝(2)-테이블 액세스 최소화2

Yu River·2022년 6월 26일
0

SQLP필기연습

목록 보기
8/35

✍️ 42번 : 인덱스 스캔 과정에서 비효율이 가장 큰 조건절 고르기

비효율의 의미

  1. '비효율이 크다'의 의미는 인덱스를 제대로 사용하지 못한 다는 것을 의미한다.
  • 인덱스 구성 : 상품유형코드 + 업체코드 + 상품코드 + 할인구분코드
    • where 상품유형코드 LIKE :a ||'%' 은 스캔량이 많을지언정 비효율은 아니다.
    • where 상품유형코드 =:a and 상품코드 =:b and 할인구분코드 =:c 은 스캔량은 적을지언정 효율적인 게 아니다.(비효율)

🍋 기출 포인트

  1. ⭐️ 비효율이 큰 거랑 스캔량이 큰 거는 엄연히 다르다. ⭐️

✍️ 45번 : Index Skip Scan의 성능 효과가 있는 쿼리와 없는 쿼리

'일시'조건과 '일자' 조건의 차이

  1. DATE 형식의 '일시'조건은 일-시-분-초 까지 표시되므로 값의 종류가 매우 많다.
  2. CHAR 형식의 '일자'조건은 년-월-일 까지 표시되므로 값의 종류가 상대적으로 적다.
  • Index Skip Scan으로 값의 종류가 상대적으로 적은 조건절이 유리하다.
  1. [예시]
  • 인덱스 구성1 : 승인요청일시 + 승인요청자ID
  • 인덱스 구성2 : 승인요청일자 + 승인요청자ID

🍋 기출 포인트

  1. ⭐️ 일시 조건은 Index Skip Scan이 효과가 없다. ⭐️
  2. ⭐️ 일자 조건은 Index Skip Scan이 효과가 있다. ⭐️

✍️ 46,47번 : IN-LIST로 구현할 떄의 효과적인 인덱스 여부

IN-LIST 구현시 한 수직당 최소 3개의 블록을 읽는다.

  1. IN-LIST 구현시 한 수직당 최소 3개의 블록을 읽는다.
  • 이를테면 4번 수직 스캔을 한다면 최소 12개의 블록을 읽는다.

🍋 기출 포인트

  1. ⭐️IN-LIST 구현을 가정한다면 한 수직 스캔당 3개의 블록을 최소로 읽는다고 가정하고 계산해야한다. ⭐️
  2. ⭐️IN-LIST 구현을 가정했을 때 오히려 인덱스 필터를 타게 하는 게 효과적일 수 있다.(데이터 스캔양을 잘 봐야한다.) ⭐️

✍️ 49번 : 범위 비교절(LIKE , BETWEEN) 인덱스 스캔 효과성 여부

IN-LIST 구현시 한 수직당 최소 3개의 블록을 읽는다.

  1. 한 인덱스의 선두 컬럼이 문자열이고 해당 컬럼으로 LIKE절 비교를 할 때 Index Range Scan이 가능하나 효과적인 옵션조건 방식이라고는 할 수 없다.
  • 해당 조건값에 아무 값도 안 들어가면 전체를 스캔해버리기 때문이다.
  1. 특정 선두 컬럼이 효율적인 스캔 방식인지 비효율적인 스캔 방식인지는 데이터 정황을 봐야 한다.
  • [예시]
    해당 예시에서는 거래일자가 선두컬럼이면 비효율적인 스캔방식이라 말할 수 있다.
select * from 거래
where 고객ID like :cust_id || '%'
and 거래일자 between :dt1 and :dt2;
profile
도광양회(韜光養晦) ‘빛을 감추고 어둠속에서 힘을 기른다’

0개의 댓글