-
B-Tree 인덱스의 특징은 왼쪽 부터 오른쪽으로 값이 정렬되있다는 것이다.
여기서 왼쪽이란, 하나의 컬럼 내에서 뿐만 아니라 다중 컬럼 인덱스의 컬럼간 순서도 의미한다.
1. 한 컬럼 내에서 왼쪽이 정해지지 않아서 인덱스를 활용하지 못하는 경우
LIKE 검색에서 왼쪽 부분이 정해 지지 않은 경우 인덱스 레인지 스캔이 불가능 하다. 한 컬럼 내의 데이터를 스캔 할 때 왼쪽 텍스트 부터 오른쪽 순서로 탐색이 이루어지기 때문이다.
LIKE 절에 왼쪽이 특정 된 경우
explain select * from tb where name like 'a%';
type : range => 인덱스 레인지 스캔
왼쪽이 특정된 경우 인덱스를 활용하는 것이 가능하다.LIKE 절에 왼쪽이 특정 되지 않은 경우
explain select * from tb where name like '%a';
type: ALL => 풀 테이블 스캔
왼쪽이 특정 되지 않은경우 인덱스를 활용하지 못하는것을 확인 할 수 있다.
2. 다중 키 인덱스에서 왼쪽 컬럼이 범위 결정 조건으로 사용 되지 않은 경우
다중 키 인덱스를 생성 할 때는, 컬럼의 순서가 중요한데 왼쪽 컬럼부터 오른쪽 컬럼 순으로 인덱스 테이블에서 탐색이 일어나기 때문에 왼쪽 컬럼이 탐색의 범위를 결정시키는 조건으로 사용되지 않는다면 인덱스 스캔을 활용 할 수 없다.
SELECT * FROM dept_emp WHERE dept_no >= 'd001' and emp_no >= 1044; // 인덱스 활용가능 SELECT * FROM dept_emp WHERE emp_no >= 1044; // 인덱스 활용 불가
cf. 조건이 인덱스의 범위 결정 조건(range)으로 활용하지 못하는 경우
1. NOT EQUAL
2. LIKE '%abc'
3. 인덱스가 설정 된 컬럼을 변형해서 비교하는 경우
4. 데이터 타입이 서로 다른 비교
5. 문자열의 경우 콜레이션이 다른 경우
'✏️ 스터디 모음집 > RealMySQL 스터디' 카테고리의 다른 글
Real MySQL 8.0 - 9.3 인덱스 컨디션 푸쉬다운 (0) 2023.05.21 Real MySQL 8.0 - 9.3 고급 최적화 - MySQL의 조인 방식들 (0) 2023.03.26 Real MySQL 8.0 8장 - 인덱스 정렬 및 스캔의 방향 (0) 2023.03.26 Real MySQL 8.0 7장 - MySQL 암호화 (0) 2023.02.26 Real MySQL 8.0 5장(2) - 트랜잭션의 격리수준 (0) 2023.02.26