1. 인덱스란?
데이터를 빠르게 찾을 수 있도록 도와주는 도구
- 클러스터형 인덱스 : 기본키로 구성되며 테이블에 1개만 만들 수 있다.
* 반드시 필요한 건 아님
하지만 실무에서는 데이터가 너무 많기 때문에 꼭 필요!
2. 인덱스의 문제점
필요 없는 인덱스를 만들어 데이터베이스가 차지하는 공간만 늘어나고, 인덱스를 이용해서 데이터를 찾는 것이 느려지는 경우가 있다.
ex) 책에 비유하면, 찾아보기가 인덱스와 같은 개념일 때,
SELECT 단어가 여러 페이지에 언급되므로 찾아보기에 SELECT 가 여러 번 표기되어있을 수 있다.
이때 찾아보기에서 SELECT -> 본문에서 데이터 찾기 -> 찾아보기에서 다음 SELECT -> 본문에서 찾기...
와 같이 인덱스를 이용해서 찾는 것이 느려지는 경우가 있다.
3. 인덱스의 장점과 단점
1) 장점
- SELECT 문으로 검색하는 속도가 매우 빨라진다.
- 전체적인 시스템 성능이 향상된다.
2) 단점
- 인덱스도 공간을 차지하기 때문에 데이터베이스 안에 추가적인 공간이 필요하다 ( 10 ~20 %)
- 처음에 인덱스를 만드는 데 시간이 오래 걸릴 수 있다.
* 이미 데이터가 많은 테이블에 인덱스를 생성하는 것보다 테이블 생성 초기에 인덱스를 생성하는 것이 좋다.
- SELECT 가 아닌 데이터의 변경 작업이 자주 일어나면 성능이 나빠질 수도 있다.
4. 인덱스의 종류
1) 클러스터형 인덱스 (영어사전, 국어사전)
영어사전처럼 데이터가 이미 정렬이 되어있어 별도의 찾아보기 페이지가 없다.
테이블에서 1개만 만들 수 있다.
2) 보조 인덱스 (책 뒤의 찾아보기 페이지들)
테이블에 여러개 만들 수 있다.
5. 자동으로 생성되는 인덱스
CREATE TABLE member
( mem_id CHAR(8) NOT NULL PRIMARY KEY,
mem_name VARCHAR(10) NOT NULL,
...
);
위 테이블은 PK인 mem_id에 자동으로 클러스터형 인덱스가 생성이 된다.
데이터를 넣을 때 순서와는 달리
SELECT * FROM member;
하게 되면 mem_id 컬럼 기준으로 알파벳 오름차순 정렬이 되어 조회된다.
SHOW INDEX FROM [테이블];
테이블의 인덱스를 확인할 수 있다.
위 쿼리 실행시 Key_name : PRIMARY 가 조회되는 경우 클러스터형 인덱스라는 의미.
CREATE TABLE table2
( col1 INT PRIMARY KEY,
col2 INT UNIQUE,
col3 ITN UNIQUE
);
SHOW INDEX FROM table2;
-> 인덱스 확인 쿼리 결과 3건
1) Key_name : PRIMARY (클러스터형 인덱스)
2) Key_name : col2, col3 (보조 인덱스)
6. 자동으로 정렬되는 클러스터형 인덱스
왼쪽은 클러스터형 인덱스를 만들지 않은 테이블이라면
오른쪽은 클러스터형 인덱스를 만드는 순간 자동으로 정렬이 된 테이블이다.
use shop_db;
drop table 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;
SELECT * FROM member; 결과는
SHOW INDEX FROM member; 는 없다.
ALTER TABLE member
ADD CONSTRAINT
PRIMARY KEY (mem_id);
mem_id를 PRIMARY KEY 로 제약조건을 추가해준 후 조회하면
mem_id 컬럼의 값을 기준으로 알파벳 오름차순으로 자동 정렬된 것을 확인할 수 있고,
SHOW INDEX FROM member; 의 결과도 바뀐 것을 확인할 수 있다.
7. 정렬되지 않는 보조 인덱스
고유키로 지정하면 보조 인덱스가 생성된다.
그리고 보조인덱스는 테이블에 여러개를 설정할 수 있으며,
책의 찾아보기와 같은 기능으로 실제 데이터베이스의 순서(본문의 내용)가 변경이 되는 것이 아니다
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, '경남');
ALTER TABLE member
ADD CONSTRAINT
UNIQUE (mem_id);
UNIQUE 키를 만들고 SELECT 해도 데이터의 순서는 변하지 않는다
(TWC -> BLK -> WMN -> OMY)
'개발자 :-) > SQL' 카테고리의 다른 글
[MySQL] 스토어드 프로시저(2) (0) | 2022.10.02 |
---|---|
[MySQL] 스토어드 프로시저 (0) | 2022.10.01 |
[MySQL] 가상의 테이블 : 뷰 (0) | 2022.09.30 |
[MySQL] 테이블, 뷰, 제약조건 (0) | 2022.09.29 |
[MySQL] SQL 프로그래밍( IF, CASE, WHILE, 동적SQL) (1) | 2022.09.26 |
댓글