📌 My Sql에서 부분 일치 검색으로 중복 데이터 제거하기

📌 개념 정리
이번 포스팅에서는 MySQL에서 부분 일치 검색을 활용하여 '한강'이라는 단어를 포함하는 모든 책 레코드를 조회하는 방법을 소개합니다. 또한, 단순 '=' 대신에 **와일드카드(%)**와 **정규표현식(RLIKE)**을 사용하여 어떻게 더 유연하게 데이터를 검색할 수 있는지 설명합니다.
🚦 핵심 개념 정리
부분 일치 검색(Like): 문자열의 특정 패턴을 찾을 때 LIKE 연산자와 와일드카드(%)를 사용합니다. 이때 **%**는 0개 이상의 임의 문자열을 의미하며, 컬럼 값 내 특정 문자열 포함 여부를 확인합니다.
와일드카드(%): LIKE 절에서 사용되며, 앞뒤로 **%한강%**처럼 위치할 수 있습니다. %한강%은 "한강"이라는 문자열 앞뒤로 어떤 문자열이 와도 일치하는 형태입니다.
RLIKE/REGEXP: MySQL에서 제공하는 정규표현식을 사용하여 더 복잡한 검색 패턴을 활용할 수 있습니다. 예를 들어, 한글 초성 매칭, 여러 구문을 동시에 매칭할 때 유용합니다.
💻 실전 적용 예시
📌 상황 1: LIKE 문 사용
SELECT *
FROM books
WHERE author LIKE '%한강%';
설명: LIKE '%한강%'은 한강이라는 문자열이 author 컬럼 안에 어디에 위치하든 관계없이 모든 경우를 조회할 수 있습니다. 예를 들어, '한강 저', '작가 한강 이야기', '한강은...' 등 모든 책을 찾을 수 있습니다.
📌 상황 2: 정규표현식 (RLIKE/REGEXP) 사용
SELECT *
FROM books
WHERE author RLIKE '한강';
설명: RLIKE '한강'은 author 컬럼에 한강이 포함된 레코드를 찾습니다. LIKE보다 더 복잡한 패턴을 사용할 수 있기 때문에, 다양한 검색 조건이 필요할 때 유용합니다. 예를 들어, 한글 초성이나 여러 구문 동시 매칭 등 복잡한 패턴을 쉽게 적용할 수 있습니다.
🚀 고급 팁
LIKE vs. FULLTEXT: LIKE는 간단한 부분 일치 검색에 용이하지만 대용량 테이블에서는 성능 이슈가 발생할 수 있습니다. 텍스트 검색이 자주 이루어지는 경우, MySQL FULLTEXT INDEX를 사용하는 것이 좋습니다.
인덱스 활용: WHERE 절에 사용되는 author 컬럼에 인덱스를 걸어두면 성능을 향상시킬 수 있습니다. 하지만, %한강%와 같은 앞쪽에 와일드카드가 포함된 검색은 인덱스 효율이 떨어집니다. 대신 한강%처럼 오른쪽 와일드카드를 사용하면 인덱스를 잘 활용할 수 있습니다.
대소문자 및 한글 정규화 이슈: MySQL의 COLLATION 설정에 따라 대소문자 구분이 달라지거나 한글 정규화 문제로 검색 결과가 달라질 수 있습니다. 검색 전에 COLLATE 설정을 확인하여 정확한 검색 결과를 얻을 수 있습니다.
✅ 마무리 요약 및 복습 포인트
- LIKE를 사용하면 간단한 부분 일치 검색이 가능하며, **%**를 적절히 활용하면 유연한 검색을 수행할 수 있습니다.
- RLIKE/REGEXP를 활용하면 더 복잡한 패턴 매칭이 가능하여, 다양한 검색 조건에 대응할 수 있습니다.
- 인덱스 활용: 성능 최적화를 위해 컬럼 인덱스와 FULLTEXT 인덱스를 고려할 수 있습니다.
- 대소문자 구분 및 COLLATE 설정을 통해 정확한 검색 결과를 얻을 수 있습니다.
이 포스팅을 참고하여 MySQL에서 효과적인 부분 일치 검색 및 최적화를 진행해 보세요! 🚀