[SQL 기초 강의] 16강.인덱스의 내부 작동 원리와 구조, 인덱스에서 데이터 검색하기 - YouTube

 

<클러스터형 인덱스 구성하기 연습>


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;
아이디를 기본키로 지정---> 클러스터형 인덱스가 만들어져, 아이디의 알파벳 순으로 정렬 됨. 



<보조 인덱스 구성하기 연습>

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', '마마무');
SELECT * FROM second;

인덱스 없이 테이블만 만든 것. 입력 순서대로 정렬

ALTER TABLE second
ADD CONSTRAINT
        UNIQUE (mem_id);
        
SELECT * FROM second;

유니크 키 지정으로 보조 인덱스를 생성해도, 데이터의 순서 바뀌지 않음. 
내부적으로 인덱스(찾아보기 기능)이 생겼고, 페이지 번호와 위치가 저장된 것이다. 

 

 

정보 검색 시, 클러스터형 인덱스가 더 효율적이라고 함.

[SQL 기초 강의] 15강. 인덱스의 개념과 장단점, 클러스터형 인덱스와 보조 인덱스 - YouTube

 

USE market_db ;

CREATE TABLE table1 (
    col1 INT PRIMARY KEY,
    col2 INT,
    col3 INT 
);
SHOW INDEX FROM table1; 


키네임에 프라이머리 있으면 자동으로 클러스터형 인덱스가 만들어진다. 그 열에 입력된 값 기준으로 사전식 정렬.



CREATE TABLE table2 (
    col1 INT PRIMARY KEY,
    col2 INT UNIQUE,
    col3 INT UNIQUE
);
SHOW INDEX FROM table2;


여기서 프라이머리 키인 컬럼 1은 클러스터 인덱스, 컬럼2, 컬럼3는 보조 인덱스로 봄. 

둘 다 자동으로 생성되는 인덱스이다.
유니크 조건이 여러 열에 붙을 수 있듯, 보조 키도 여러개 만들 수 있음.
프라이머리키와 클러스터형 인덱스는 테이블 당 하나만 만들 수 있다. 

 

 


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;


새로운 멤버 테이블 만들었다. 인덱스 없이(PK 지정 안 하고) 무작위로 입력하면, 입력한 순서 그대로 테이블에서 보인다.

 

 


ALTER TABLE member
ADD CONSTRAINT
    PRIMARY KEY(mem_id);
SELECT *FROM member;


프라이머리 키 다시 지정한 후 불러오면 멤버 아이디가 알파벳 순으로 정렬되는 걸 확인할 수 있다.
클러스터형 인덱스가 자동으로 생성된 것.

 

 

ALTER TABLE member DROP PRIMARY KEY ; 
다시 기본 키를 제거하고
ALTER TABLE member
ADD CONSTRAINT
    PRIMARY KEY(mem_name);
새로운 기본 키를 멤버 이름 열에 부여하면
SELECT * FROM member;
멤버 이름 순으로 다시 정렬되는 걸 확인할 수 있다.

 


INSERT INTO member VALUES ('GRL', '소녀시대', 8, '서울');
이 상태에서 소녀시대 행을 새로 입력하면
SELECT * FROM member;
블핑, 여자친구 사이에 삽입이 되었다. ㄱㄴㄷ 순으로.

 

 


보조인덱스UNIQUE, 고유 키로 지정하면 생성된다. 
클러스터 형 인덱스를 사전 만들기에 비유한다면, 
보조 인덱스는 용어 사전이 아니라 줄글로 된 책의 인덱스를 만드는 것과 비슷하다. 
책의 내용을 다시 정렬하는 것이 아니라, 맨 뒤에 <찾아보기>를 추가하는 방식이다. 

USE market_db;
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;

 

인덱스 없이 새로운 테이블 만들기.

 

 


ALTER TABLE member
ADD CONSTRAINT
    UNIQUE (mem_id);
SELECT * FROM member;


유니크 키를 추가한 뒤 멤버 테이블을 조회해도, 내용, 순서가 바뀌지 않았다. 보조 인덱스가 생성된 것이다.

 

 


ALTER TABLE member
ADD CONSTRAINT
    UNIQUE (mem_name);
SELECT * FROM member;


두번째 유니크 키를 지정함. 책 뒤에 찾아보기는 여러 버전으로 만들 수 있으므로.

 

 

 


INSERT INTO member VALUES ('GRL', '소녀시대' ,8, '서울');
SELECT * FROM member;


새로운 행은 그냥 맨 뒤에 추가된다.

+ Recent posts