Language/SQL

[MySQL] 인덱스의 개념을 알아보자

seoraroong 2024. 8. 21. 11:45

인덱스의 개념

인덱스 : 데이터를 빠르게 찾을 수 있도록 하는 도구

  • 클러스터형 인덱스 : 기본 키로 지정 시 자동 생성, 테이블에 1개만 생성 가능
  • 보조 인덱스 : 고유 키로 지정하면 자동 생성, 여러 개 생성 가능, 자동 정렬 x

 

인덱스의 장점

SELECT 문 검색 속도 향상

컴퓨터의 부담 감소 → 전체 시스템 성능 향상

 

 

인덱스의 단점

인덱스도 공간을 차지하기 때문에 DB 내에 추가적인 공간이 필요하다.

처음 인덱스 생성 시 시간 소요된다.

SELECT가 아닌 INSERT, UPDATE, DELETE가 자주 일어나면 오히려 성능 저하를 유발하게 된다.

 

 

인덱스의 종류

 

클러스터형 인덱스

→ 자동으로 생성되는 인덱스

 

- 자동으로 생성되는 인덱스 확인하기

use market_db;
create table table1 (
	col1 int primary key,
	col2 int,
	col3 int
);

show index from table1;

→ [Key_name]이 PRIMARY로 되어 있다

→ 기본 키로 설정해서 ‘자동으로 생성된 인덱스’

 

 

- 자동으로 정렬되는 클러스터형 인덱스

-- 회원 테이블 새로 생성하고 컬럼 만들기
use market_db;
drop table if exists buy, member;
create table member
( mem_id char(8),
	mem_name varchar(10),
	mem_number int,
	addr char(2)
);

-- 데이터 입력하기
insert into member values('TWC', '트와이스', 9, '서울');
insert into member values('BLK', '블랙핑크', 4, '경남');
insert into member values('WMN', '여자친구', 6, '경기');
insert into member values('OMY', '오마이걸', 7, '서울');

select * from member;

 

- mem_id 컬럼을 기본 키로 설정 후 조회하기

alter table member
		add constraint
		primary key (mem_id);
select * from member;

 

→ mem_id 를 기준으로 정렬 순서가 바뀐 것을 확인할 수 있다

(알파벳 순서로 정렬)

 

 

- mem_name 컬럼을 기본 키로 설정 후 조회하기

alter table member drop primary key;
alter table member
		add constraint
		primary key(mem_name);
select * from member;

 

→ mem_name 컬럼을 기준으로 데이터가 다시 정렬되었음

 

 

- 추가로 데이터 입력해보기

insert into member values('GRL','소녀시대',8,'서울');
select * from member;

→ 추가로 데이터를 insert할 경우 자동으로 기준에 맞춰 정렬된다

 

 

 

보조 인덱스

 

- 고유 키로 생성되는 인덱스 확인하기

create table table2 (
	col1 int primary key,
	col2 int unique,
	col3 int unique
);

show index from table2;

→ 보조 인덱스는 고유 키로 지정하면 자동으로 생성, 테이블에 여러 개 생성 가능

→ 기본 키와 마찬가지로 고유 키도 중복값을 허용하지 않는다 (Non_unique = 0)

 

 

- 정렬되지 않는 보조 인덱스

-- 테이블 drop 하고 새로 생성하기
drop table if exists member;
create table member 
( mem_id char(8),
	mem_name varchar(10),
	mem_number int,
	addr char(2)
);

-- 데이터 입력하기
insert into member values('TWC', '트와이스', 9, '서울');
insert into member values('BLK', '블랙핑크', 4, '경남');
insert into member values('WMN', '여자친구', 6, '경기');
insert into member values('OMY', '오마이걸', 7, '서울');

select * from member;

 

- mem_id 컬럼을 고유 키로 설정하고 조회하기

alter table member
		add constraint
		unique (mem_id);
select * from member;

→ 보조 인덱스를 생성해도 데이터의 순서는 변경되지 않는다.

 

 

- -mem_name 컬럼에 추가로 고유 키를 설정하고 조회하기

alter table member
		add constraint
		unique (mem_name);
select * from member;

→ 추가로 고유 키를 지정해도 데이터의 내용과 순서는 그대로이다

 

 

- 데이터 추가로 입력하기

insert into member values('GRL','소녀시대',8,'서울');
select * from member;

→ 새로운 데이터 추가 시 가장 마지막에 입력된다.

 

클러스터형 인덱스 : 기본 키로 지정하면 해당 열로 자동 정렬
보조 인덱스 : 고유 키로 지정하면 보조 인덱스 생성, 자동 정렬되지 않는다