Database/MySQL
[MYSQL] NOT LIKE vs NOT REGEXP
phyho
2025. 6. 6. 12:22
Mysql 쿼리 where 조건절에서
user_id 가 a 또는 b으로 시작하지 않는 문자열 제외하려면
- user_id NOT LIKE 'a%' AND user_id NOT LIKE 'b%'
- 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 가공 컬럼 사용)