MySQL에서 SELECT DISTINCT 쿼리의 실행 속도를 높이는 가장 효과적인 방법 중 하나는 대상 컬럼 또는 컬럼 집합에 인덱스(index)를 생성하는 것입니다. 인덱스가 있으면 MySQL이 전체 테이블을 스캔하지 않고도 고유한 값을 빠르게 식별할 수 있어 쿼리 성능이 크게 향상됩니다.
1. 예제 테이블 생성
먼저 실습에 사용할 테이블을 생성합니다.
mysql> create table DemoTable
(
Name varchar(40)
);
Query OK, 0 rows affected (1.13 sec)2. 인덱스 생성
다음 쿼리로 Name 컬럼에 인덱스를 생성합니다.
mysql> create index Name_Index on DemoTable(Name); Query OK, 0 rows affected (1.56 sec) Records: 0 Duplicates: 0 Warnings: 0
3. 데이터 삽입
insert 명령을 사용해 테이블에 여러 레코드를 추가합니다. 의도적으로 중복 데이터를 포함시켰습니다.
mysql> insert into DemoTable values('Chris');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values('Mike');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values('Chris');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable values('Chris');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable values('Sam');
Query OK, 1 row affected (0.16 sec)4. 전체 레코드 조회
select 문으로 테이블의 모든 레코드를 확인합니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+-------+ | Name | +-------+ | Chris | | Chris | | Chris | | Mike | | Sam | +-------+ 5 rows in set (0.00 sec)
5. DISTINCT를 활용한 중복 제거 조회
이제 distinct 키워드를 사용하여 중복 없이 고유한 값만 조회합니다.
mysql> select distinct Name from DemoTable;
실행 결과는 다음과 같습니다.
+-------+ | Name | +-------+ | Chris | | Mike | | Sam | +-------+ 3 rows in set (0.02 sec)
위 결과에서 볼 수 있듯이 'Chris'가 세 번 저장되어 있지만 DISTINCT 쿼리는 각 이름을 한 번씩만 반환합니다. 이처럼 인덱스가 설정된 컬럼에 대해 DISTINCT를 실행하면 MySQL이 인덱스를 활용해 중복 제거 작업을 효율적으로 처리하므로, 대용량 테이블에서도 빠른 응답 속도를 기대할 수 있습니다.