MySQL에서 여러 조건에 맞는 데이터를 빠르게 조회하려면 IN() 연산자를 사용하는 것이 좋습니다. IN()은 내부적으로 인덱싱을 활용하기 때문에 여러 개의 OR 조건을 나열하는 방식보다 훨씬 효율적이고 쿼리 실행 속도도 빠릅니다.
예제 테이블 생성하기
먼저 실습에 사용할 테이블을 생성해 보겠습니다.
mysql> create table DemoTable1618
-> (
-> ClientId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> ClientName varchar(20),
-> ClientEmailId varchar(30)
-> );
Query OK, 0 rows affected (1.53 sec)
테이블에 데이터 삽입하기
INSERT 명령어를 사용해 몇 개의 레코드를 추가합니다.
mysql> insert into DemoTable1618(ClientName,ClientEmailId) values('Chris Brown','Brown323@gmail.com');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable1618(ClientName,ClientEmailId) values('David Miller','MillerDavid@gmail.com');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable1618(ClientName,ClientEmailId) values('John Doe','998John_Doe@gmail.com');
Query OK, 1 row affected (0.28 sec)
mysql> insert into DemoTable1618(ClientName,ClientEmailId) values('John Smith','999John_Smith@gmail.com');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable1618(ClientName,ClientEmailId) values('Adam Smith','Adam_Smith@gmail.com');
Query OK, 1 row affected (0.17 sec)저장된 전체 데이터 확인하기
SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select * from DemoTable1618;
위 쿼리는 다음과 같은 결과를 출력합니다.
+----------+--------------+-------------------------+
| ClientId | ClientName | ClientEmailId |
+----------+--------------+-------------------------+
| 1 | Chris Brown | Brown323@gmail.com |
| 2 | David Miller | MillerDavid@gmail.com |
| 3 | John Doe | 998John_Doe@gmail.com |
| 4 | John Smith | 999John_Smith@gmail.com |
| 5 | Adam Smith | Adam_Smith@gmail.com |
+----------+--------------+-------------------------+
5 rows in set (0.00 sec)
IN() 연산자로 빠른 조회 수행하기
이제 IN()을 활용해 특정 이메일 주소 3개에 해당하는 데이터만 조회하는 쿼리를 작성해 보겠습니다.
mysql> select * from DemoTable1618 where ClientEmailId IN('998John_Doe@gmail.com','999John_Smith@gmail.com','MillerDavid@gmail.com');실행 결과는 다음과 같습니다.
+----------+--------------+-------------------------+
| ClientId | ClientName | ClientEmailId |
+----------+--------------+-------------------------+
| 2 | David Miller | MillerDavid@gmail.com |
| 3 | John Doe | 998John_Doe@gmail.com |
| 4 | John Smith | 999John_Smith@gmail.com |
+----------+--------------+-------------------------+
3 rows in set (0.00 sec)
IN() 사용 시 참고 사항
IN()은 지정한 값 목록과 일치하는 행만 반환하며, 내부적으로 인덱스를 활용할 수 있어 대량의 데이터를 다룰 때 OR 조건 반복보다 성능상 유리합니다. 또한 코드가 간결해져 유지보수성도 크게 향상됩니다.