DataBase

[DB] 인덱스 조회시 참고 사항

Trillion Binary 2023. 2. 7. 09:19
SMALL
1. between, like, <, > 등 범위 조건은 해당 컬럼은 인덱스를 타지만, 그 뒤 인덱스 컬럼들은 인덱스가 사용되지 않습니다.
  • ​group_no, from_date, is_bonus으로 인덱스가 잡혀있는데 조회 쿼리를
    where group_no=XX and is_bonus=YY and from_date > ZZ등으로 잡으면 is_bonus는 인덱스가 사용되지 않습니다.
  • ​from_date 뒤에 있는 from_date 인덱스는 안탑니다.
 
2. =, in 은 다음 컬럼도 인덱스를 사용합니다.
  • in은 결국 =를 여러번 실행시킨 것이기 때문입니다.
  • 단, in은 인자값으로 상수가 포함되면 문제 없지만, 서브쿼리를 넣게되면 성능상 이슈가 발생합니다.
    in의 인자로 서브쿼리가 들어가면 서브쿼리의 외부가 먼저 실행되고, in 은 체크조건으로 실행되기 때문입니다.
 
3. AND연산자는 각 조건들이 읽어와야할 ROW수를 줄이는 역할을 하지만, or 연산자는 비교해야할 ROW가 더 늘어나기 때문에 풀 테이블 스캔이 발생할 확률이 높습니다.
  • WHERE 에서 OR을 사용할때는 주의가 필요합니다.
 
4. 인덱스로 사용된 컬럼값 그대로 사용해야만 인덱스가 사용됩니다.
  • 인덱스는 가공된 데이터를 저장하고 있지 않습니다.
  • where salary * 10 > 150000는 인덱스를 못타지만, where salary > 150000 / 10 은 인덱스를 사용합니다.
  • 컬럼이 문자열인데 숫자로 조회하면 타입이 달라 인덱스가 사용되지 않습니다. 정확한 타입을 사용해야만 합니다.
 
5. null 값의 경우 is null 조건으로 인덱스 레인지 스캔 가능
BIG