Data Analysis/혼공SQL

[혼공SQL] 6-1 인덱스 개념을 파악하자

알밤바 2022. 8. 9. 11:42
728x90
반응형

본 포스팅은 '한빛출판네트워크'의 '혼공SQL' 책을 기반으로 작성한 포스팅입니다.

 

1. 인덱스

1.1 인덱스의 장점과 단점

  • 장점
    • SELECT 문으로 검색하는 속도가 매우 빨라짐
    • 컴퓨터의 부담이 줄어들어 전체 시스템의 성능이 향상됨
  • 단점
    • 데이터베이스 안에 추가적인 공간이 필요함
    • 처음 인덱스를 만드는 데 시간이 오래 걸림
    • 인덱스는 잘 사용하면 SELECT의 검색 속도가 빨라지지만, 잘못 사용하면 오히려 성능이 나빠짐

 

2. 인덱스의 종류

  • 클러스터형 인덱스 (Clustered Index) → 영어사전
  • 보조 인덱스 (Secondary Index) → 찾아보기

2.1 클러스터형 인덱스

📌 자동 생성됨

  • 기본 키로 지정하면 자동으로 클러스터형 인덱스 가 생성됨
  • (기본 키는 테이블에 하나만 지정할 수 있으므로 클러스터형 인덱스도 테이블에 한 개만 만들 수 있음)
use market_db;

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

show index from table1;

  • Key_name : PRIMARY
    • 기본 키(PK)로 설정하여 ‘자동으로 생성된 인덱스’
    • 클러스터형 인덱스
  • Column_name : col1
    • col1 열에 인덱스가 만들어져있음
  • Non_unique : 0
    • 0 : False (중복 허용이 안 됨)
    • 1 : True (중복 허용이 됨)

📌 자동 정렬됨

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;

 

alter table member
	add constraint
    **primary key (mem_id);  -**- pk 지정 (클러스터형 인덱스 생성)

select * from member;

▶ PK로 지정한 mem_id 가 자동 정렬된 것을 확인할 수 있음

 

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

▶ 이후 추가로 데이터를 입력하면 알아서 기준에 맞춰서 정렬됨

 

2.2 보조 인덱스

  • 보조 인덱스는 여러 개를 만들 수 있지만,
  • 만들 때마다 데이터베이스의 공간을 차지하게 되어 시스템에 좋지 못한 영향을 미침

📌 자동 생성됨

create table table2 (
	col1 int primary key,
    col2 int unique,  -- 고유키 지정
    col3 int unique   -- 고유키 지정
);

show index from table2;

 

📌 자동 정렬되지 않음

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;

 

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

▶ 보조 인덱스를 생성되어도 정렬은 변하지 않음

 

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

▶ 데이터를 추가로 입력하면 제일 하단에 추가됨

728x90
반응형