2025. 2. 16. 16:01ㆍ혼자 공부하는 SQL
이번주는 진짜 빨리 지나가서 호정이 아녔음 5주차인지도 모르고 시킵할 뻔했다ㅎㅎ(•́ε•̀;ก)💦
인덱스 개념을 파악하자
데이터를 빠르게 찾기 위해 사용함! 잘 사용하면 성능이 좋아질 수 있다~
+ 많이 만든다고 좋은 게 아님! 필요 없는 인덱스는 데이터베이스가 차지하는 공간은 늘리고 전체 테이블에서 찾는 것보다 느려진다.
인덱스의 장점과 단점
장점
- SELECT 문으로 검색하는 속도가 매우 빨라진다.
- 컴퓨터의 부담이 줄어들어서 전체 시스템의 성능이 향상됨
단점
- 데이터베이스 안에 추가적인 공간이 필요하다.
- 처음에 인덱스를 만드는 데 시간이 오래 걸릴 수 있다.
- SELECT가 아닌 데이터의 변경 작업이 자주 일어나면 오히려 성능이 나빠질 수도 있다.
인덱스의 종류
클래스터형 인덱스(Clustered Index) : 기본 키 지정 → 자동 생성. 테이블에 1개만 만들 수 있음.
보조 인덱스(Secondary Index) : 고유 키 지정 → 자동 생성. 여러개 가능.
단순 보조 인덱스 : 중복 허용
고유 보조 인덱스 : 중복 금지
클래스터형 인덱스로 지정했을 때는 col1이 정렬되어 나온다.
보조 인덱스로 저정했을 때는 col1이 입력한 순으로 나온다.
※ 보조 인덱스는 여러 개를 만들 수 있지만 꼭 필요한 열에만 적절히 생성하는 것이 좋다.
인덱스의 내부 작동
클래스트형 인덱스와 보조 인덱스는 모두 내부적으로 균형 트리로 만들어짐
- 뿌리 (루트) / 루트 노드 (루트 페이지)
- 줄기 (중간) / 중간 노드 (중간 페이지)
- 잎 (리프) / 리프 노드 (리프 페이지)
노드(node) : 균형 트리 구조에서 데이터가 저장되는 공간
=> MySql에서는 페이지(page)
전체 테이블 검색 : 데이터를 처음부터 끝까지 검색하는 것
페이지 분할 : 데이터를 입력할 페이지에 공간이 없어서 2개 페이지로 데이터가 나눠지는 것
인덱스 검색 : 클러스터형 또는 보조 인덱스를 이용해서 데이터를 검색하는 것
인덱스의 실제 사용
인덱스 생성과 제거
CREATE [UNIQUE] INDEX 인덱스_이름
ON 테이블_이름 (열_이름) [ASC | DESC]
사실 인덱스를 생성하는 문법은 더(많이) 길다...
UNIQUE 쓰지 않으면 Non_unique로 단순 보조 인덱스가 만들어진다.
DROP INDEX 인덱스_이름 ON 테이블_이름
인덱스를 제거할 때는 보조 인덱스부터 제거하는 것이 더 좋다.
ANALYZE TABLE 테이블_이름
ANALYZE TABLE 문을 실행하여 생성한 인덱스를 적용한다.
ALTER TABLE 테이블_이름
DROP PRIMARY KEY;
Primary Key에 설정된 인덱스는 DROP INDEX 문으로 제거되지 않고 ALTER TABLE 문으로만 제거 가능한다.
만약! 기본 키를 참조하고 있는 외래 키가 있다면 외래 키를 먼저 제거해야 한다.
오늘의 숙제
오늘도 무사히 제출 성공ㅎㅎ
'혼자 공부하는 SQL' 카테고리의 다른 글
[혼공S] 회고 타임 (0) | 2025.02.23 |
---|---|
[혼공S] 6주차_스토어드 프로시저 (0) | 2025.02.23 |
[혼공S] 4주차_제약조건, 뷰 (0) | 2025.02.09 |
[혼공S] 3주차_데이터 타입, 조인, 조건문, 동적 SQL (0) | 2025.01.26 |
[혼공S] 2주차_문법 (0) | 2025.01.19 |