본문 바로가기

Database/MySQL

[MYSQL] NOT LIKE vs NOT REGEXP

 

Mysql 쿼리 where 조건절에서 
user_id 가 a 또는 b으로 시작하지 않는 문자열 제외하려면

  1. user_id NOT LIKE 'a%' AND user_id NOT LIKE 'b%' 
  2. user_id NOT REGEXP '^[ab]'

 

* 기능 차이

항목 NOT LIKE NOT REGEXP
지원 범위 단순문자열 매칭 -> 와일드카드 (%, _) 정규표현식 전체 사용 가능
복잡한 조건 어렵고 길어짐 한 줄로 다양하게 표현 가능
여러 조건 묶기 AND, OR 로 조건 나열해야 함 '^[ab]' 같은 식으로 한 번에 가능
문자열만 사용 숫자에 LIKE 쓰려면 CAST() 필요 REGEXP는 문자열로 간주 가능함 ( '^[25]'  )

 

 

* 성능 비교

항목 NOT LIKE NOT REGEXP
인덱스 사용 여부 NOT이 붙으면 인덱스 사용 불가 REGEXP도 거의 항상 인덱스 사용 못 함
비교 성능 조금 더 빠름 (간단한 문자열 비교) 복잡한 패턴일수록 느릴 수 있음
조건 수가 많을 때 성능 저하 (조건이 많아지면 느림) 상대적으로 표현은 간결하지만, 성능은 유사하거나 느릴 수 있음

 


 

조건 1~2개, 단순한 접두어 제외 => NOT LIKE (빠르고 직관적)

조건이 여러 개고 접두어 다양 => NOT REGEXP (표현 간결, 가독성 우수)

대량 데이터 처리/인덱스 고려 => 둘 다 비추 (구조 개선 or 가공 컬럼 사용)