개발/MySQL

MySQL] MySQL 퍼포먼스 최적화 (WHERE 조건 이해)

펭귀니 :) 2022. 3. 19. 17:14

3. WHERE 조건 이해

 

묵시적 형변환 함정

묵시적 형변환
- 조건절의 데이터 타입이 다를 때 우선순위가 높은 타입으로 타입이 변환되는 것
- 우선순위 : 정수 타입 > 문자열 타입

묵시적 형변환이 일어나는 대상이 인덱스 필드라면...? 모든 데이터 형변환을 위해 테이블 풀스캔이 일어난다ㅠ

따라서 WHERE절에는 칼럼 타입에 맞춰서 질의해야한다. 어플리케이션에서 질의 시 실수하기 좋으니 주의하자
(우선순위가 정수형이 높으니 무조건 문자열로 질의하는 것도... 방법이라면 방법이다.)

 

LIKE 검색 시 주의할 점

'%' 위치에 따라 다르게 수행된다.

DB 자료는 인덱스 키 값 순서로 정렬, 관리되므로 중간 또는 뒷부분부터 검색하면 인덱스 의미가 없어진다.

LIKE 'xxx%'
- 인덱스가 걸려있는 컬럼이면 인덱스를 사용해서 쿼리가 빠르게 처리된다.
- 다만 옵티마이저가 데이터 분포도를 판단하여, 풀스캔이 빠르다고 판단하면 풀스캔이 일어날 수도 있다.

LIKE '%xxx%'
- 테이블 풀스캔

LIKE '%xxx'
- 테이블 풀스캔

 

📖 출처

성동찬 지음, 『MySQL 퍼포먼스 최적화』, 한빛미디어(2013)