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

MySQL에서 Sybase ASE 명령에 해당하는 기능은? EXPLAIN 키워드 활용법

Sybase ASE 환경에 익숙한 개발자가 MySQL로 전환할 때 가장 궁금해하는 부분 중 하나는 쿼리 실행 계획을 확인하는 방법입니다. Sybase ASE의 해당 명령과 동일한 역할을 하는 MySQL의 키워드는 바로 EXPLAIN입니다.

EXPLAIN이란?

EXPLAIN은 SELECT 문 앞에 붙여 사용하며, MySQL이 해당 쿼리를 어떻게 실행할지에 대한 실행 계획(execution plan)을 보여줍니다. 인덱스 사용 여부, 조인 방식, 스캔되는 행 수 등을 확인할 수 있어 쿼리 성능 최적화에 필수적인 도구입니다.

실제 예제를 통해 살펴보겠습니다.

1. 테스트 테이블 생성

먼저 예제에 사용할 테이블을 생성합니다.

mysql> create table DemoTable1531
-> (
-> StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> StudentName varchar(20)
-> );
Query OK, 0 rows affected (2.92 sec)

mysql> create index Name_index1 on DemoTable1531(StudentName);
Query OK, 0 rows affected (0.99 sec)
Records: 0 Duplicates: 0 Warnings: 0

StudentName 컬럼에 Name_index1이라는 인덱스를 함께 생성했습니다. 이 인덱스가 실행 계획에서 어떻게 활용되는지 확인하는 것이 이 예제의 핵심입니다.

2. 샘플 데이터 삽입

INSERT 문을 사용해 몇 개의 레코드를 추가합니다.

mysql> insert into DemoTable1531(StudentName) values('Chris');
Query OK, 1 row affected (0.19 sec)

mysql> insert into DemoTable1531(StudentName) values('Robert');
Query OK, 1 row affected (0.10 sec)

mysql> insert into DemoTable1531(StudentName) values('David');
Query OK, 1 row affected (0.12 sec)

mysql> insert into DemoTable1531(StudentName) values('Mike');
Query OK, 1 row affected (0.12 sec)

mysql> insert into DemoTable1531(StudentName) values('Carol');
Query OK, 1 row affected (0.09 sec)

3. 저장된 데이터 확인

SELECT 문으로 테이블의 전체 레코드를 조회합니다.

mysql> select * from DemoTable1531;

실행 결과는 다음과 같습니다.

+-----------+-------------+
| StudentId | StudentName |
+-----------+-------------+
| 5 | Carol |
| 1 | Chris |
| 3 | David |
| 4 | Mike |
| 2 | Robert |
+-----------+-------------+
5 rows in set (0.00 sec)

4. EXPLAIN으로 실행 계획 확인하기

이제 MySQL에서 Sybase ASE 명령에 해당하는 EXPLAIN을 실제로 적용해 보겠습니다.

mysql> EXPLAIN select * from DemoTable1531 where StudentName='Mike';

실행 결과는 다음과 같습니다.

+----+-------------+---------------+------------+------+---------------+-------------+---------+-------+------+----------+-------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+---------------+------------+------+---------------+-------------+---------+-------+------+----------+-------------+
| 1 | SIMPLE | DemoTable1531 | NULL | ref | Name_index1 | Name_index1 | 63 | const | 1 | 100.00 | Using index |
+----+-------------+---------------+------------+------+---------------+-------------+---------+-------+------+----------+-------------+
1 row in set, 1 warning (0.00 sec)

실행 계획 결과 해석

출력된 주요 컬럼의 의미는 다음과 같습니다.

  • type: ref — 인덱스를 사용해 일치하는 행만 조회하는 접근 방식입니다. 전체 테이블 스캔(ALL)보다 훨씬 효율적입니다.
  • possible_keys / key: Name_index1 — 사용 가능한 후보 인덱스와 실제 선택된 인덱스가 모두 Name_index1임을 보여줍니다.
  • rows: 1 — MySQL이 검사해야 할 것으로 예상하는 행 수로, 인덱스 덕분에 단 1행만 조회하면 됩니다.
  • Extra: Using index — 커버링 인덱스(Covering Index)가 활용되어 테이블 데이터에 추가로 접근하지 않고도 결과를 얻었음을 의미합니다.

마무리

이처럼 MySQL의 EXPLAIN 키워드는 Sybase ASE의 실행 계획 확인 기능과 동일한 역할을 수행합니다. 쿼리 앞에 EXPLAIN만 붙이면 인덱스 활용 여부와 예상 비용을 손쉽게 파악할 수 있으므로, 느린 쿼리를 분석하고 데이터베이스 성능을 튜닝할 때 반드시 활용하시기 바랍니다.