LIKE 연산자는 인덱스를 이용해 질의할 수 있다.
DBMS에서는 단순한 문자열 패턴 비교 연산자로 LIKE 연산자를 REGEXP 연산자보다 더 많이 사용한다. REGEXP 연산자는 인덱스를 전혀 사용하지 못한다는 단점이 있지만, LIKE 연산자는 인덱스를 이용해 처리할 수 있다.
LIKE 연산자는 정규 표현식을 검사하는 것이 아니라, 어떤 상수 문자열이 있는지 없는지 정도를 판단하는 연산자다.
LIKE 연산자는 와일드카드 문자인(&, _) 가 검색어의 뒤쪽에 있다면 인덱스 레인지 스캔으로 사용할 수 있지만, 와일드카드가 검색어의 앞쪽에 있다면 인덱스 레인지 스캔을 사용할 수 없으므로 주의해서 사용해야 한다.
B-Tree 인덱스를 이용한 검색은 100% 일치 또는 값의 앞부분(Left-most part)만 일치하는 경우에 사용할 수 있습니다. 부등호("<>") 비교나 값의 뒷부분이 일치하는 경우에는 B-Tree 인덱스를 이용한 검색이 불가능합니다.
인덱스 레인지 스캔 예시
EXPLAIN
SELECT COUNT(*)
FROM employees
WHERE first_name LIKE 'Christ%';
employees 테이블에서 "Christ"로 시작하는 이름을 검색하려면 레인지 스캔 방식을 이용해서 검색할 수 있다.
인덱스 풀 스캔 예시
EXPLAIN
SELECT COUNT(*)
FROM employees
WHERE first_name LIKE '%rist';
인덱스의 Left-most 특성으로 인해 레인지 스캔을 사용하지 못하고, 인덱스를 처음부터 끝까지 읽는 인덱스 풀 스캔 방식으로 쿼리가 처리된다.
'DataBase' 카테고리의 다른 글
[MySQL] CASE WHEN과 서브쿼리를 활용한 쿼리 최적화 (0) | 2023.04.11 |
---|---|
[MySQL] BETWEEN 연산자를 활용한 쿼리 최적화 (0) | 2023.04.11 |
[H2 DB] insert시 auto increment인 sequence 값을 바로 받아 오는 법 (0) | 2023.03.28 |
[MariaDB] 정규화 관련 / 맵핑 테이블 (0) | 2023.01.24 |
MariaDB 자동 삭제 / 이메일 인증코드 전송 후 자동 삭제 (0) | 2022.12.30 |
댓글