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 |