껄껄껄
코딩무새입니다.

LIKE에 대해서 알아보겠습니다.
LIKE는 정말 유용한데요.
유용한 만큼 잘못 사용하면 성능에 문제를 일으킬 수 있죠.
LIKE?
MySQL의 LIKE 연산자는 부분 일치, 패턴 검색을 수행할 때 자주 사용됩니다.
주로 WHERE과 함께 사용되죠.
기본문법
기본 문법은 다음과 같습니다.
SELECT . . .
FROM {TABLE_NAME}
WHERE {COLUMN1} LIKE 'Parr%';
SELECT . . .
FROM {TABLE_NAME}
WHERE {COLUMN1} LIKE 'P___ot';
Parrot이라는 데이터를 찾으려는 LIKE 기본문법 쿼리입니다.
예제 쿼리가 두 개군요?!
그렇습니다.
LIKE는 두 가지 와일드카드를 사용할 수 있죠.
'%'
- 0개 이상의 문자를 대체합니다.
- LIKE 'Parr%'에서 r 뒤의 모든 문자를 대체하여 찾는 조건입니다.
- ex. Parrot, Parr123, ParrTester...
'_'
- 정확히 1개의 문자를 대체합니다.
- LIKE 'P___ot'에서는 _사용이 세 번 되었으니, 3개의 문자열을 대체하는 패턴으로 데이터를 가져옵니다.
- ex. Parrot, P123ot, Ptesot...
예제 쿼리
그럼 실제 데이터로 확인해 보겠습니다.
아래는 username 데이터입니다.
SELECT username
FROM users;
+----------+
| username |
+----------+
| parrot |
| test1 |
| test2 |
| test3 |
| apt |
| bear |
| zip |
+----------+
7 rows in set (0.00 sec)
LIKE를 사용해 볼게요~
먼저 '%'를 사용한 예제쿼리입니다.
SELECT username FROM users WHERE username LIKE 'te%';
+----------+
| username |
+----------+
| test1 |
| test2 |
| test3 |
+----------+
3 rows in set (0.00 sec)
SELECT username FROM users WHERE username LIKE '%t';
+----------+
| username |
+----------+
| parrot |
| apt |
+----------+
2 rows in set (0.00 sec)
SELECT username FROM users WHERE username LIKE '%es%';
+----------+
| username |
+----------+
| test1 |
| test2 |
| test3 |
+----------+
3 rows in set (0.00 sec)
첫 번째 쿼리에 te로 시작하는 username을 조회했습니다.
두 번째 쿼리는 t로 끝나는 username을 가져왔네요.
마지막 쿼리는 es가 포함된 username을 줍줍 했어요.
차이가 보이시나요!?
다음은 '_'를 활용해 볼게요.
SELECT username FROM users WHERE username LIKE 'a__';
+----------+
| username |
+----------+
| apt |
+----------+
1 row in set (0.00 sec)
SELECT username FROM users WHERE username LIKE 't_s__';
+----------+
| username |
+----------+
| test1 |
| test2 |
| test3 |
+----------+
3 rows in set (0.00 sec)
SELECT username FROM users WHERE username LIKE '___';
+----------+
| username |
+----------+
| apt |
| zip |
+----------+
2 rows in set (0.00 sec)
첫 번째 쿼리는 a 이후 두 자리를 대체하는 username을 조회했어요.
두 번째 쿼리는 t 다음 한자리 s 다음 두 자리 문자를 대체하는 username을 가져왔네요.
마지막 쿼리는 세 글자인 username을 줍줍 했습니다.
NOT LIKE
LIKE의 활용을 반대로 할 수도 있습니다.
바로 NOT을 사용할 수 있죠.
SELECT username FROM users WHERE username NOT LIKE '___';
+----------+
| username |
+----------+
| parrot |
| test1 |
| test2 |
| test3 |
| bear |
| timo |
| nula |
+----------+
7 rows in set (0.00 sec)
mysql> SELECT username FROM users WHERE username NOT LIKE 'Parr%';
+----------+
| username |
+----------+
| test1 |
| test2 |
| test3 |
| apt |
| bear |
| zip |
| timo |
| nula |
+----------+
8 rows in set (0.00 sec)
첫 번째 쿼리는 세 글자가 아닌 데이터가 나왔고, 두 번째 쿼리는 Parr로 시작하지 않는 username을 검색해 왔습니다.
사용 시 유의할 점
LIKE는 유용하지만 잘 못 사용하면 성능 저하를 일으킬 수도 있습니다.
특히 인덱스 활용여부에 따라서 성능이 크게 떨어질 수 있는데요.
LIKE 연산자의 패턴에 따라 인덱스 사용 여부가 달라집니다
- LIKE 'keyword%' → 인덱스 사용
- LIKE '%keyword' → 인덱스 미사용
- LIKE '%keyword%' → 인덱스 미사용
이런 성능이슈를 해결하는 방법으론 FULLTEXT 인덱스 활용 같은 방법이 있겠네요.
LIKE에 대해서 쓰다 보니 뭔가 길게 쓴 거 같네요.
길게 쓰니 좋군요.
껄껄껄
'IT무새 > Database' 카테고리의 다른 글
[MySQL] HAVING (0) | 2025.03.25 |
---|---|
[MySQL] 데이터 그룹화 | GROUP BY (2) | 2025.03.09 |
[MySQL] IN 연산자 (3) | 2025.02.06 |
[MySQL] Mysql에 CSV 데이터 Import | HeidiSQL (2) | 2025.02.01 |
[MySQL] 쿼리 조건 | WHERE Clause (2) | 2025.02.01 |