여러 열(멀티 컬럼)로 구성된 UNIQUE 인덱스를 생성하려면 CREATE UNIQUE INDEX 문에서 인덱스 이름을 지정하고, 그 뒤에 두 개 이상의 열을 나열하면 됩니다. 이렇게 하면 해당 열들의 조합 전체가 중복되지 않도록 데이터베이스가 보장합니다.
멀티 컬럼 UNIQUE 인덱스 생성 예제
다음 예제는 'employee' 테이블의 'empid', 'first_name', 'last_name' 세 개의 열에 'id_fname_lname'이라는 이름의 멀티 컬럼 UNIQUE 인덱스를 생성합니다.
mysql> Create UNIQUE INDEX id_fname_lname on employee(empid,first_name,last_name); Query OK, 0 rows affected (0.41 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> describe employee; +------------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +------------+-------------+------+-----+---------+-------+ | empid | int(11) | YES | MUL | NULL | | | first_name | varchar(20) | YES | | NULL | | | last_name | varchar(20) | YES | | NULL | | +------------+-------------+------+-----+---------+-------+ 3 rows in set (0.12 sec)
위 쿼리의 결과 집합을 보면 테이블에 복수 열로 구성된 인덱스가 정의되어 있음을 확인할 수 있습니다. 'empid' 열의 Key 값이 'MUL'로 표시되는 것도 인덱스가 여러 열에 걸쳐 적용되었음을 나타냅니다.
인덱스 상세 정보 확인하기
생성된 인덱스에 대한 자세한 정보를 확인하려면 다음과 같이 SHOW INDEX 문을 실행하면 됩니다.
mysql> Show index from employee\G *************************** 1. row *************************** Table: employee Non_unique: 0 Key_name: id_fname_lname Seq_in_index: 1 Column_name: empid Collation: A Cardinality: 0 Sub_part: NULL Packed: NULL Null: YES Index_type: BTREE Comment: Index_comment: *************************** 2. row *************************** Table: employee Non_unique: 0 Key_name: id_fname_lname Seq_in_index: 2 Column_name: first_name Collation: A Cardinality: 0 Sub_part: NULL Packed: NULL Null: YES Index_type: BTREE Comment: Index_comment: *************************** 3. row *************************** Table: employee Non_unique: 0 Key_name: id_fname_lname Seq_in_index: 3 Column_name: last_name Collation: A Cardinality: 0 Sub_part: NULL Packed: NULL Null: YES Index_type: BTREE Comment: Index_comment: 3 rows in set (0.00 sec)
결과 집합에서 주목할 점은 세 행 모두 'Key_name' 값이 동일한 'id_fname_lname'이라는 것입니다. 이는 테이블의 세 열 각각에 별도의 인덱스를 만든 것이 아니라, 모든 열을 포함하는 하나의 멀티 컬럼 인덱스를 생성했기 때문입니다. 또한 'Seq_in_index' 값을 통해 각 열이 인덱스 내에서 어떤 순서로 배치되어 있는지(1, 2, 3번째) 알 수 있으며, 'Non_unique' 값이 0인 것은 이 인덱스가 UNIQUE 제약 조건을 가진다는 의미입니다.