3. WHERE 조건 이해
묵시적 형변환 함정
묵시적 형변환
- 조건절의 데이터 타입이 다를 때 우선순위가 높은 타입으로 타입이 변환되는 것
- 우선순위 : 정수 타입 > 문자열 타입
묵시적 형변환이 일어나는 대상이 인덱스 필드라면...? 모든 데이터 형변환을 위해 테이블 풀스캔이 일어난다ㅠ
따라서 WHERE절에는 칼럼 타입에 맞춰서 질의해야한다. 어플리케이션에서 질의 시 실수하기 좋으니 주의하자
(우선순위가 정수형이 높으니 무조건 문자열로 질의하는 것도... 방법이라면 방법이다.)
LIKE 검색 시 주의할 점
'%' 위치에 따라 다르게 수행된다.
DB 자료는 인덱스 키 값 순서로 정렬, 관리되므로 중간 또는 뒷부분부터 검색하면 인덱스 의미가 없어진다.
LIKE 'xxx%'
- 인덱스가 걸려있는 컬럼이면 인덱스를 사용해서 쿼리가 빠르게 처리된다.
- 다만 옵티마이저가 데이터 분포도를 판단하여, 풀스캔이 빠르다고 판단하면 풀스캔이 일어날 수도 있다.
LIKE '%xxx%'
- 테이블 풀스캔
LIKE '%xxx'
- 테이블 풀스캔
📖 출처
성동찬 지음, 『MySQL 퍼포먼스 최적화』, 한빛미디어(2013)
'개발 > MySQL' 카테고리의 다른 글
MySQL] utf8 vs utf8mb4 (0) | 2023.01.05 |
---|---|
MySQL] MySQL 퍼포먼스 최적화 (쿼리 성능 최적화) (0) | 2022.03.19 |
MySQL] MySQL 퍼포먼스 최적화 (MySQL 구조) (0) | 2022.03.19 |