Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 SELECT DISTINCT 쿼리 속도를 높이는 방법

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이 인덱스를 활용해 중복 제거 작업을 효율적으로 처리하므로, 대용량 테이블에서도 빠른 응답 속도를 기대할 수 있습니다.