MySQL에서 여러 개의 OR 조건 대신 IN() 활용하기
MySQL에서 특정 여러 값을 조건으로 조회할 때, 여러 개의 OR 문을 나열하는 방식보다 IN() 연산자를 사용하는 것이 훨씬 효율적입니다. IN()은 코드가 간결하고 가독성이 뛰어나며, MySQL 옵티마이저가 내부적으로 더 효율적으로 처리할 수 있어 성능 면에서도 유리합니다.
실제 예제를 통해 IN()의 사용법을 단계별로 살펴보겠습니다.
1단계: 테이블 생성
먼저 데모용 테이블을 생성합니다.
mysql> create table DemoTable
-> (
-> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> FirstName varchar(20)
-> );
Query OK, 0 rows affected (0.83 sec)
2단계: 레코드 삽입
INSERT 명령을 사용하여 테이블에 샘플 데이터를 입력합니다.
mysql> insert into DemoTable(FirstName) values('John');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable(FirstName) values('Adam');
Query OK, 1 row affected (0.27 sec)
mysql> insert into DemoTable(FirstName) values('David');
Query OK, 1 row affected (0.09 sec)
mysql> insert into DemoTable(FirstName) values('Mike');
Query OK, 1 row affected (0.48 sec)
mysql> insert into DemoTable(FirstName) values('Bob');
Query OK, 1 row affected (0.09 sec)3단계: 전체 데이터 확인
SELECT 문으로 테이블에 저장된 모든 레코드를 조회합니다.
mysql> select *from DemoTable;
위 쿼리는 다음과 같은 결과를 출력합니다.
+----+-----------+
| Id | FirstName |
+----+-----------+
| 1 | John |
| 2 | Adam |
| 3 | David |
| 4 | Mike |
| 5 | Bob |
+----+-----------+
5 rows in set (0.00 sec)
4단계: IN()으로 원하는 데이터만 조회
이제 Id가 2, 3, 5인 레코드를 IN() 연산자로 조회해 보겠습니다.
mysql> select *from DemoTable where Id IN(2,3,5);
실행 결과는 다음과 같습니다.
+----+-----------+
| Id | FirstName |
+----+-----------+
| 2 | Adam |
| 3 | David |
| 5 | Bob |
+----+-----------+
3 rows in set (0.00 sec)
IN()을 사용하면 좋은 점
- 가독성 향상: 조건이 많아질수록 OR 문은 길어지지만, IN()은 값 목록만 나열하면 되므로 쿼리가 깔끔해집니다.
- 유지보수 용이: 조건 값을 추가하거나 삭제할 때 괄호 안의 목록만 수정하면 됩니다.
- 성능 최적화: MySQL 옵티마이저는 IN() 조건을 더 효율적으로 처리할 수 있어, 인덱스 활용 시 성능 이점을 기대할 수 있습니다.
이처럼 동일한 컬럼에 대해 여러 값을 비교해야 할 때는 OR 문을 반복해서 작성하기보다 IN() 연산자를 사용하는 것이 가장 좋은 대안입니다.