노드 하나에 데이터가 4개 들어가는 것으로 표현을 했다.
밑에 그림은 루트 페이지 없이 리프 페이지만을 나타내었다.(인덱스가 없는 상태)
FULL TABLE SCAN 굉장히 좋지않다. 데이터 한개를 찾기위해서 3페이지를 다 찾았다.
100만 페이지 짜리면? 100만페이지를 다 찾아야 한다.
(느리게 찾느냐)
페이지를 하나씩 찾으면서 데이터를 찾는데, 두페이지만 읽어서 찾게 된다.(빨리 찾느냐)
인덱스를 구성하면 SELECT는 빨라지나 INSERT UPDATE DELETE시 성능이 나빠질 수 있다.
아래를 보면 II를 넣기 위해서 JJJ를 아래로 한 칸 이동 했다.
이번에는 GGG를 넣어주는 작업을 하는데 III JJJ가 있는 페이지를 따로 생성을 해서 페이지가 하나 늘어나게 된다.
즉 느려지게 된다.
이번에 QQQ를 넣게되면 세 페이지나 분할이 생긴다.(페이지 분할이 생기기 때문이다.)
아래 코드를 실행시켜보자. 영어 사전처럼 mem_id 순으로 정렬이 된다.
USE market_db;
CREATE TABLE cluster -- 클러스터형 테이블
( mem_id CHAR(8) ,
mem_name VARCHAR(10)
);
INSERT INTO cluster VALUES('TWC', '트와이스');
INSERT INTO cluster VALUES('BLK', '블랙핑크');
INSERT INTO cluster VALUES('WMN', '여자친구');
INSERT INTO cluster VALUES('OMY', '오마이걸');
INSERT INTO cluster VALUES('GRL', '소녀시대');
INSERT INTO cluster VALUES('ITZ', '잇지');
INSERT INTO cluster VALUES('RED', '레드벨벳');
INSERT INTO cluster VALUES('APN', '에이핑크');
INSERT INTO cluster VALUES('SPC', '우주소녀');
INSERT INTO cluster VALUES('MMU', '마마무');
SELECT * FROM cluster;
ALTER TABLE cluster
ADD CONSTRAINT
PRIMARY KEY (mem_id);
SELECT * FROM cluster;
이번에는 보조인덱스를 UNIQUE를 이용해서 만들어 보자.
USE market_db;
CREATE TABLE second -- 보조 인덱스 테이블
( mem_id CHAR(8) ,
mem_name VARCHAR(10)
);
INSERT INTO second VALUES('TWC', '트와이스');
INSERT INTO second VALUES('BLK', '블랙핑크');
INSERT INTO second VALUES('WMN', '여자친구');
INSERT INTO second VALUES('OMY', '오마이걸');
INSERT INTO second VALUES('GRL', '소녀시대');
INSERT INTO second VALUES('ITZ', '잇지');
INSERT INTO second VALUES('RED', '레드벨벳');
INSERT INTO second VALUES('APN', '에이핑크');
INSERT INTO second VALUES('SPC', '우주소녀');
INSERT INTO second VALUES('MMU', '마마무');
ALTER TABLE second
ADD CONSTRAINT
UNIQUE (mem_id);
SELECT * FROM second;
클러스터형 인덱스는 영어사전이기 때문에 사전자체가 알파벳 순으로 되어있다.
내용 자체도 인덱스라고 생각하면 된다. (전체가 INDEX => 두 페이지를 검색해서 찾음 / 효율적)
보조인덱스는 아래와 같은 방법으로 찾게된다.(세 페이지를 검색해서 찾음)
<출처 한빛미디어: 인덱스의 내부 작동 원리와 구조, 인덱스에서 데이터 검색하기>
https://www.youtube.com/watch?v=vWTDuoSG-YQ&list=PLVsNizTWUw7GCfy5RH27cQL5MeKYnl8Pm&index=17
'SQL(MySQL)' 카테고리의 다른 글
스토어드 프로시저(stored procedure)의 개념과 사용 방법 (0) | 2022.04.19 |
---|---|
인덱스의 생성과 제거 문법 (0) | 2022.04.12 |
인덱스 개념과 장단점, 클러스터형 인덱스와 보조 인덱스 (0) | 2022.04.12 |
가상 테이블 : 뷰(CREATE, UPDATE, DELETE) (0) | 2022.04.12 |
테이블 제약조건(기본키, 외래키, 고유키) (0) | 2022.04.11 |