#혼공학습단13기 #혼공S #SQL #MYSQL

🔖 Chapter 06 : 인덱스

<aside> 📔

인덱스 TIP

  1. 인덱스는 잘 사용하면 SELECT 문의 출력 속도가 빨라지지만, 잘못 사용하면 성능이 나빠짐 (INSERT, UPDATE, DELETE를 자주 사용할 때)
  2. 인덱스 검색 vs 전체 테이블 내 검색 중 무엇이 빠를지 MySQL이 알아서 판단함
  3. Key_name이 Primary = 클러스터형 덱스 </aside>

<aside> 📔

인덱스를 효과적으로 사용하는 방법

  1. 인덱스는 열 단위에 생성
  2. WHERE 절에서 사용되는 열에 생성
  3. 자주 사용하는 것에 생성
  4. 데이터의 중복이 높은 열은 인덱스를 만들어도 효과 적음
  5. 클러스터형 인덱스는 테이블당 하나만 생성 가능
  6. 사용하지 않는 인덱스는 제거 </aside>

<aside> 📔

6장에서 사용된 SQL 문법

📍 인덱스 개념을 파악하자

인덱스는 데이터를 빠르게 찾을 수 있도록 해주는 도구입니다.

1. 클러스터형 인덱스 - 자동 정렬 🙆🏻

<aside>

1. 클러스터형 인덱스(Clustered Index)란?

클러스터형 인덱스(Clustered Index)는 데이터가 실제 저장된 순서와 동일하게 정렬되는 인덱스입니다.

즉, 인덱스의 순서가 곧 데이터의 물리적 저장 순서와 같기 때문에 하나의 테이블에는 하나의 클러스터형 인덱스만 존재할 수 있습니다.

2. 특징

  1. 데이터의 물리적 정렬
  2. 빠른 검색
  3. 기본키와의 관계
  4. INSERT/UPDATE/DELETE 시 성능 영향

3. 예시

- 테이블 생성 및 클러스터형 인덱스 추가

CREATE TABLE member (
    mem_id CHAR(8) NOT NULL PRIMARY KEY,  -- 기본키가 자동으로 클러스터형 인덱스가 됨
    mem_name VARCHAR(10) NOT NULL,
    mem_number INT
);

- 클러스터형 인덱스가 정렬을 유지하는 방식

INSERT INTO member (mem_id, mem_name, mem_number) VALUES ('BLK', 블랙핑크, 4);
INSERT INTO member (mem_id, mem_name, mem_number) VALUES ('TWC', 트와이스, 9);
INSERT INTO member (mem_id, mem_name, mem_number) VALUES ('OMY', 오마이걸, 7); --PK는 mem_id

실제 저장되는 데이터 순서: BLK → OMY → TWC


4. 주의 사항

  1. 자주 변경되는 컬럼에는 부적절
  2. INSERT 성능 저하 가능
  3. 디스크 단편화 발생 가능

5. 요약

2. 보조 인덱스 - 자동 정렬 🙅🏻‍♀️

<aside>

1. 보조 인덱스(Secondary Index)란?

보조 인덱스(Secondary Index)는 테이블의 기본 데이터 정렬과 관계없이 별도로 생성되는 인덱스입니다.

즉, 클러스터형 인덱스 외에도 특정 컬럼에 대한 검색 속도를 높이기 위해 추가로 생성하는 인덱스입니다.

클러스터형 인덱스가 데이터의 물리적 정렬을 결정하는 반면, 보조 인덱스는 별도로 저장되며 물리적 데이터 정렬과 무관합니다.


2. 특징

  1. 테이블당 여러 개 생성 가능
  2. 빠른 검색(특히 특정 값 조회 시 유리)
  3. 인덱스의 구조
  4. INSERT/UPDATE/DELETE 시 성능 영향

3. 예시

테이블 생성 및 보조 인덱스 추가

CREATE TABLE member (
    mem_id CHAR(8)
    mem_name VARCHAR(10) NOT NULL,
    mem_number INT
); --고유키 없음

ALTER TABLE member
  ADD CONSTRAINT
  UNIQUE (mem_id)


4. 주의 사항

  1. 보조 인덱스가 많을수록 성능 저하 가능
  2. 범위 검색 성능 고려
  3. 중복 값이 많을 경우 인덱스 효과 감소

5. 요약



🌳 인덱스의 내부 작동 - 균형 트리

<aside>

</aside>



📍 인덱스의 실제 사용 - 인덱스 관련 SQL 문법 정리

<aside>

</aside>

<aside>

</aside>



📝: p. 310 인덱스 생성하고 key_name이 PRIMARY로 출력된 결과 화면 캡처하기

SHOW INDEX FROM member;
SHOW TABLE STATUS LIKE 'member';
CREATE INDEX idx_member_addr
   ON member (addr);
SHOW INDEX FROM member;
ANALYZE TABLE member;
SHOW TABLE STATUS LIKE 'member';

image.png

image.png

image.png

image.png

image.png