[MySql] 인덱스 조회시 주의 사항

인덱스 조회시 주의 사항

    • betweenlike<> 등 범위 조건은 해당 컬럼은 인덱스를 타지만, 그 뒤 인덱스 컬럼들은 인덱스가 사용되지 않습니다.
      • 즉, group_no, from_date, is_bonus으로 인덱스가 잡혀있는데 조회 쿼리를 where group_no=XX and is_bonus=YY and from_date > ZZ등으로 잡으면 is_bonus는 인덱스가 사용되지 않습니다.
      • 범위조건으로 사용하면 안된다고 기억하시면 좀 더 쉽습니다.
    • 반대로 =in 은 다음 컬럼도 인덱스를 사용합니다.
      • in은 결국 =를 여러번 실행시킨 것이기 때문입니다.
      • 단, in은 인자값으로 상수가 포함되면 문제 없지만, 서브쿼리를 넣게되면 성능상 이슈가 발생합니다.
      • in의 인자로 서브쿼리가 들어가면 서브쿼리의 외부가 먼저 실행되고, in 은 체크조건으로 실행되기 때문입니다.
    • AND연산자는 각 조건들이 읽어와야할 ROW수를 줄이는 역할을 하지만, or 연산자는 비교해야할 ROW가 더 늘어나기 때문에 풀 테이블 스캔이 발생할 확률이 높습니다.
      • WHERE 에서 OR을 사용할때는 주의가 필요합니다.
    • 인덱스로 사용된 컬럼값 그대로 사용해야만 인덱스가 사용됩니다.
      • 인덱스는 가공된 데이터를 저장하고 있지 않습니다.
      • where salary * 10 > 150000;는 인덱스를 못타지만, where salary > 150000 / 10; 은 인덱스를 사용합니다.
      • 컬럼이 문자열인데 숫자로 조회하면 타입이 달라 인덱스가 사용되지 않습니다. 정확한 타입을 사용해야만 합니다.
    • null 값의 경우 is null 조건으로 인덱스 레인지 스캔 가능
0
0
이 글을 페이스북으로 퍼가기 이 글을 트위터로 퍼가기 이 글을 카카오스토리로 퍼가기 이 글을 밴드로 퍼가기
captcha
자동등록방지 숫자입력

웹개발

번호 제목 글쓴이 날짜 조회수
62 [Linux] CentOS postfix 메일서버 설치 및 설정(sendmail 설정) 최고관리자 12-23 1,491
61 [Ubuntu] 인터넷 연결이 안될 때 최고관리자 12-07 1,298
60 [Apache SSL] Ubuntu 인증서(전자서명) 최고관리자 11-24 1,410
59 [Ubuntu] ssl 임시 인증서 준비 및 발급받기 최고관리자 11-23 1,801
58 [Ubuntu] apache2 환경설정 생성기 최고관리자 11-23 3,017
57 [Ubuntu] apache2 설치 최고관리자 11-23 1,317
56 [vi 편집기] 단축키 최고관리자 11-23 1,246
55 [유용한 블로그] ^^.^^ 최고관리자 11-19 1,255
54 [JS] TimelineJS - 시간의 흐름을 네비게이션화 최고관리자 11-19 1,322
53 [JS] 스크롤을 감지하여 사이트의 헤더를 보이거나 숨기기 최고관리자 11-19 1,458
52 [Linux] NAS Mount 최고관리자 11-12 1,272
51 [React] React활용 최고관리자 11-10 1,313
50 [PHP] exec 실행에 대한 응답코드 최고관리자 11-02 1,661
49 [Linux] Shell Script 최고관리자 10-26 1,568
48 [폰트] 폰트 찾기 사이트 최고관리자 10-21 1,371
47 [통신] Socket packet test Program 최고관리자 10-20 1,855
46 [통신] 맥용 Socket Test Program 최고관리자 10-20 1,645
45 [통신] Mac에서 TCP Socket통신 테스트 하기 최고관리자 10-20 2,918
44 [NginX] 504 Gateway Time-out 에러와 해결방법 +1 최고관리자 10-16 24,640
43 [NginX] 설정 최고관리자 10-13 1,582