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

MySQL SHOW INDEX, SHOW INDEXES, SHOW KEYS 차이점 완벽 정리

MySQL에서 SHOW INDEX, SHOW INDEXES, SHOW KEYS는 모두 동일합니다

MySQL에서 SHOW INDEX, SHOW INDEXES, SHOW KEYS 세 가지 구문은 문법적 표현만 다를 뿐 기능과 결과가 완전히 동일합니다. 세 구문 모두 테이블에 정의된 인덱스 정보를 조회하는 데 사용되며, 어떤 것을 사용해도 출력 결과에는 차이가 없습니다.

실제 예제를 통해 세 구문이 동일한 결과를 반환하는지 확인해 보겠습니다.

1. 테스트용 테이블 생성

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

mysql> create table DemoTable1549
    -> (
    -> EmployeeId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> EmployeeName varchar(20)
    -> );
Query OK, 0 rows affected (0.82 sec)

기본 키(PK)로 설정된 EmployeeId 컬럼은 자동으로 인덱스가 생성됩니다.

2. 인덱스 생성

다음 쿼리로 EmployeeName 컬럼에 인덱스를 추가합니다.

mysql> create index name_index1 on DemoTable1549(EmployeeName);
Query OK, 0 rows affected (0.41 sec)
Records: 0  Duplicates: 0  Warnings: 0

3. SHOW INDEX 실행

mysql> show index from DemoTable1549;

실행 결과:

+---------------+------------+-------------+--------------+--------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+
| Table         | Non_unique | Key_name    | Seq_in_index | Column_name  | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Visible |
+---------------+------------+-------------+--------------+--------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+
| demotable1549 |          0 | PRIMARY     |            1 | EmployeeId   |         A |           0 |     NULL |   NULL |      | BTREE      |         |               |     YES |
| demotable1549 |          1 | name_index1 |            1 | EmployeeName |         A |           0 |     NULL |   NULL | YES  | BTREE      |         |               |     YES |
+---------------+------------+-------------+--------------+--------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+
2 rows in set (0.17 sec)

4. SHOW INDEXES 실행

mysql> show indexes from DemoTable1549;

실행 결과:

+---------------+------------+-------------+--------------+--------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+
| Table         | Non_unique | Key_name    | Seq_in_index | Column_name  | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Visible |
+---------------+------------+-------------+--------------+--------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+
| demotable1549 |          0 | PRIMARY     |            1 | EmployeeId   |         A |           0 |     NULL |   NULL |      | BTREE      |         |               |     YES |
| demotable1549 |          1 | name_index1 |            1 | EmployeeName |         A |           0 |     NULL |   NULL | YES  | BTREE      |         |               |     YES |
+---------------+------------+-------------+--------------+--------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+
2 rows in set (0.00 sec)

5. SHOW KEYS 실행

mysql> show keys from DemoTable1549;

실행 결과:

+---------------+------------+-------------+--------------+--------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+
| Table         | Non_unique | Key_name    | Seq_in_index | Column_name  | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Visible |
+---------------+------------+-------------+--------------+--------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+
| demotable1549 |          0 | PRIMARY     |            1 | EmployeeId   |         A |           0 |     NULL | NULL   |      | BTREE      |         |               |     YES |
| demotable1549 |          1 | name_index1 |            1 | EmployeeName |         A |           0 |     NULL | NULL   | YES  | BTREE      |         |               |     YES |
+---------------+------------+-------------+--------------+--------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+
2 rows in set (0.00 sec)

출력 결과 해석하기

세 구문 모두 동일한 형식의 결과를 반환하며, 주요 컬럼의 의미는 다음과 같습니다.

  • Non_unique: 인덱스가 중복 값을 허용하면 1, 고유 인덱스(UNIQUE)면 0입니다. PRIMARY 키는 0으로 표시됩니다.
  • Key_name: 인덱스의 이름입니다. 기본 키는 항상 'PRIMARY'로 표시됩니다.
  • Seq_in_index: 복합 인덱스일 경우 해당 컬럼이 인덱스 내에서 차지하는 순번입니다.
  • Column_name: 인덱스가 적용된 컬럼 이름입니다.
  • Cardinality: 인덱스에 저장된 고유 값의 추정 개수로, 옵티마이저가 실행 계획을 세울 때 참고합니다.
  • Index_type: 인덱스의 자료구조 유형입니다. InnoDB에서는 일반적으로 BTREE가 사용됩니다.
  • Visible: MySQL 8.0부터 지원되는 기능으로, 인덱스의 가시성 여부를 나타냅니다.

결론

SHOW INDEX, SHOW INDEXES, SHOW KEYS는 MySQL에서 서로 다른 이름을 가진 동일한 명령어입니다. 이는 다른 데이터베이스 시스템(예: Oracle의 SHOW INDEX, SQL Server의 sp_helpindex)과의 호환성을 고려해 여러 표기를 지원하는 것입니다. 따라서 개인의 선호나 팀의 코딩 컨벤션에 따라 편하게 선택하여 사용하면 됩니다.