단일 테이블에서 여러 개의 SELECT 쿼리를 반복해서 실행하면 데이터베이스에 불필요한 부담을 주고 성능 저하로 이어질 수 있습니다. 이럴 때 IN() 연산자를 사용하면 쿼리를 한 번만 실행하면서 여러 값을 동시에 조회할 수 있어 성능을 크게 향상시킬 수 있습니다.
예제 테이블 생성하기
먼저 실습용 데모 테이블을 생성해 보겠습니다.
mysql> create table DemoTable ( Id int, Name varchar(100), Age int ); Query OK, 0 rows affected (0.77 sec)
데이터 삽입하기
INSERT 명령을 사용해 테이블에 샘플 레코드를 추가합니다.
mysql> insert into DemoTable values(1,'Chris',23); Query OK, 1 row affected (0.39 sec) mysql> insert into DemoTable values(2,'David',21); Query OK, 1 row affected (0.56 sec) mysql> insert into DemoTable values(3,'Mike',24); Query OK, 1 row affected (0.28 sec) mysql> insert into DemoTable values(4,'Robert',22); Query OK, 1 row affected (0.12 sec)
저장된 데이터 확인하기
SELECT 문을 사용하여 테이블의 모든 레코드를 조회합니다.
mysql> select *from DemoTable ;
위 쿼리는 다음과 같은 결과를 출력합니다.
+------+--------+------+ | Id | Name | Age | +------+--------+------+ | 1 | Chris | 23 | | 2 | David | 21 | | 3 | Mike | 24 | | 4 | Robert | 22 | +------+--------+------+ 4 rows in set (0.00 sec)
IN()을 활용한 최적화된 쿼리 작성하기
다음은 IN() 연산자를 사용해 단일 테이블에서 여러 SELECT를 하나의 쿼리로 통합한 예시입니다. 나이가 21, 22, 23인 사용자들의 이름을 한 번의 쿼리로 모두 조회할 수 있습니다.
mysql> select Name from DemoTable where Age in(21,22,23);
실행 결과는 다음과 같습니다.
+--------+ | Name | +--------+ | Chris | | David | | Robert | +--------+ 3 rows in set (0.00 sec)
이처럼 IN() 연산자를 활용하면 조건이 서로 다른 여러 SELECT 쿼리를 하나로 합쳐 실행할 수 있습니다. 그 결과 데이터베이스와의 통신 횟수가 줄어들고, 쿼리 파싱 및 실행 계획 수립 오버헤드도 감소하여 전체적인 처리 속도가 크게 향상됩니다.