[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
자동등록방지 숫자입력

웹개발

번호 제목 글쓴이 날짜 조회수
22 [리눅스] Apache Document Root 권한설정 최고관리자 09-04 1,626
21 [리눅스] CentOS Version 확인하기 최고관리자 09-04 1,462
20 [리눅스] MySQL 최초 접속 및 설정 최고관리자 09-03 1,754
19 [리눅스] MySQL 5.7 보안설정 최고관리자 09-03 1,551
18 [리눅스] RDate로 시간 동기화 하기. 최고관리자 09-03 1,476
17 [리눅스] 기본설치 (Apache , PHP , MySql) 최고관리자 09-03 2,032
16 [공부] 프로그래밍 공부 사이트 최고관리자 09-01 1,407
15 [기능] Mobile 메뉴 최고관리자 09-01 1,374
14 [기능] Mega Menu 최고관리자 09-01 1,422
13 [기능] 상단에서 메뉴높이가 높고 아래로 스크롤하면 메뉴높이가 줄어듦 최고관리자 09-01 1,426
12 [기능] 상단에 메뉴가 보이다가 아래로 스크롤하면 메뉴가 사라지고 상단으로 가면 메뉴가 보임. 최고관리자 09-01 1,345
11 [기능] 메뉴가 안 보이다가 아래로 스크롤하면 메뉴가 생김 최고관리자 09-01 1,447
10 [기능] Icon으로 구성된 수직/수평 메뉴 최고관리자 09-01 1,292
9 [JS] 자바스크립트 {...} [...] 문법 (비구조화 할당/구조분해 할당) 최고관리자 09-01 1,301
8 [기능] 상단의 높이가 큰 메뉴상태에서 아래로 스크롤하면 상단에 높이가 낮은 메뉴가 고정됨 최고관리자 09-01 1,304
7 [Font] Naversoftware 폰트 리스트 최고관리자 09-01 1,368
6 [Web Font] 직접입력해서 폰트를 확인할 수 있는 사이트 최고관리자 09-01 1,358
5 [CSS - font] unicode-range 최고관리자 08-31 1,585
4 [UI 참고] Oven - 회원가입 최고관리자 08-31 1,321
3 타자기체 - 가로 세로 비율이 고정되어 있는 글꼴로 표현 최고관리자 08-08 1,410