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 가공 컬럼 사용)
'Database > MySQL' 카테고리의 다른 글
| [MyBatis / MySQL] useGeneratedKeys, keyProperty, keyColumn (0) | 2025.04.08 |
|---|---|
| [MYSQL] ORDER BY column_name + 0 (형변환) (0) | 2025.02.26 |
| [SQL] RANK(), DENSE_RANK() (0) | 2024.11.27 |
| [DB문법] 집계함수, group by, grouping, rollup (0) | 2024.03.04 |
| [DB문법] 날짜&시간, case when, null값 처리 (0) | 2024.02.27 |