균형 트리
- 균형트리는 나무를 거꾸로 표현한 자료 구조입니다.
- 트리에서 상단의 뿌리를 루트, 줄기를 중단, 끝에 달린 잎을 리프라고 부릅니다.
- 균형 트리 구조에서 데이터가 저장되는 공간을 노드라고 합니다.
- 루트 노드는 노드의 가장 상위 노드이며 모든 출발이 이곳에서 시작됩니다.
- 리프 노드는 제일 마지막에 존재하는 노드입니다.
- 노드는 MySQL에서 페이지라고 부르며 최소한의 저장단위를 말합니다.(16 Kbyte)
- 균형 트리는 데이터를 검색할 때 아주 뛰어난 성능을 발휘합니다.
균형 트리의 페이지 분할
- 인덱스는 균형트리로 구성되어 있습니다.
- SELECT의 속도를 향상할 수 있습니다.
- 데이터 변경작업(INSERT, UPDATE, DELETE) 할시 성능이 나빠집니다.
- 위 같은 이유는 페이지 분할 작업이 발생하기 때문입니다.
- 페이지 분할은 새로운 페이지를 준비해서 데이터를 나누는 작업을 말합니다.
클러스터형 인덱스 구성하기
- 클러스터형 인덱스 구조는 먼저 인덱스를 구성하기 위해 행 데이터를 지정한 열로 정렬한 후
각 페이지의 인덱스로 지정된 열의 첫 번째 값을 가지고 루트페이지를 만드는 것입니다.
아래 코드는 예시입니다.
먼저 코드를 입력해 줍니다.
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', '소녀시대');
SELECT * FROM cluster;
그 후 mem_id에 클러스터형 인덱스를 구성해 주시면 바뀐 것을 확인할 수 있습니다.
ALTER TABLE cluster
ADD CONSTRAINT
PRIMARY KEY (mem_id);
SELECT * FROM cluster;
보조 인덱스 구성하기
- 보조 인덱스가 생성되어도 입력한 것과 순서가 동일합니다.
- 보조 인덱스는 데이터 페이지를 건드리지 않습니다.
- 별도의 장소에 인덱스 페이지를 생성합니다.
아래 코드는 예시입니다.
먼저 코드를 입력해 줍니다.
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', '소녀시대');
그 후 mem_id 열에 UNIQUE를 지정해 주고 보시면 입력순서가 동일한 것을 확인할 수 있습니다.
ALTER TABLE second
ADD CONSTRAINT
UNIQUE (mem_id);
인덱스에서 데이터 검색하기
- 클러스터형 또는 보조 인덱스를 이용해서 데이터를 검색하는 것입니다.
- 두 인덱스 모두 검색이 빠르지만 클러스터형 인덱스가 더 빠르다고 합니다.
- 속도는 인덱스를 사용하지 않았을 때 보다 빠릅니다.
'학습단 > SQL 학습단' 카테고리의 다른 글
5주차 완료 (0) | 2023.08.12 |
---|---|
혼공스 18일차(인덱스 실제 사용) (0) | 2023.08.10 |
혼공스 16일차(인덱스) (0) | 2023.08.08 |
4주차 완료 (0) | 2023.07.29 |
혼공스 15일차(가상의 테이블 뷰) (0) | 2023.07.28 |