본문 바로가기
DataBase

[MySQL] LIKE 연산자를 활용한 쿼리 최적화

by bkuk 2023. 4. 7.

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 특성으로 인해 레인지 스캔을 사용하지 못하고, 인덱스를 처음부터 끝까지 읽는 인덱스 풀 스캔 방식으로 쿼리가 처리된다.

 

댓글