1. 인덱스
- 테이블을 더 빠르게 조회하기 위한 참조 수단(책의 '찾아보기'와 유사)
- 실무에서 매우 빈번히 사용 for 검색 속도 향상
- 열 단위로 사용
- 테이블을 가리키는 대상이기에 테이블 삭제되면 같이 삭제
2. 인덱스의 부작용
- 인덱스를 저장할 추가적인 저장 공간 필요
- 인덱스 작성 시간도 있다 : 행 데이터가 너무 많으면 이 시간이 오래 걸릴 수 있음
- 검색(SELECT)가 아닌 작업(INSERT, UPDATE, DELETE)시 성능 악화
3. 인덱스의 종류
- 클러스터형 인덱스(Clustered index)
- PRIMARY KEY(우선 지정) / UNIQUE + NOT NULL 제약 조건 지정 시 자동 생성
- 테이블 당 하나
- 행 데이터가 인덱스로 지정된 데이터에 대해 자동 정렬
- 보조 인덱스(Secondary index)
- 테이블당 여러 개 가능
- 중복 가능
- 고유키로 지정된 칼럼은 자동으로 보조 인덱스가 생성(UNIQUE제약 조건)
- 행 데이터가 인덱스로 지정된 데이터에 대해 자동 정렬X
# 인덱스 생성
CREATE INDEX 인덱스명 ON 테이블명 (열명);
CREATE INDEX 인덱스명 ON 테이블명 (열1, 열2);
# 인덱스 조회
SHOW INDEX FROM 테이블명;
# 인덱스 삭제
DROP INDEX 인덱스명 ON 테이블명;
- 예제
CREATE TABLE categories(
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
PRIMARY KEY(id)
);
INSERT INTO categories (name) VALUES
('Category 1'),
('Category 2'),
('Category 3'),
('Category 4'),
('Category 5'),
('Category 6'),
('Category 7'),
('Category 8'),
('Category 9'),
('Category 10');
-- 인덱스 확인
SHOW INDEX FROM categories;
-- 중복이 허용되는 INDEX 생성
CREATE INDEX idx_category_name ON categories(name);
-- 중복된 데이터가 있을 경우 INDEX 생성이 안됨
SELECT * FROM categories;
INSERT INTO categories(name) VALUES('Category 7');
CREATE UNIQUE INDEX idx_category_name2 ON categories(name);
DELETE FROM categories WHERE name = ('Category 7');
DROP INDEX idx_category_name2 ON categories;
-- 인덱스 적용 여부 확인
EXPLAIN SELECT * FROM categories WHERE name = 'Category 7';
DROP INDEX idx_category_name ON categories;
EXPLAIN SELECT * FROM categories WHERE name = 'Category 7';
'데이터베이스' 카테고리의 다른 글
11. 효율적 쿼리_JOIN - 패스트캠퍼스 백엔드 부트캠프 3기 (0) | 2025.01.20 |
---|---|
10. 효율적 쿼리_뷰 - 패스트캠퍼스 백엔드 부트캠프 3기 (0) | 2025.01.19 |
8. 데이터 삭제_DELETE - 패스트캠퍼스 백엔드 부트캠프 3기 (0) | 2025.01.19 |
7. 데이터 수정_UPDATE - 패스트캠퍼스 백엔드 부트캠프 3기 (0) | 2025.01.19 |
6. 데이터 조회_세부적으로 검색하기 - 패스트캠퍼스 백엔드 부트캠프 3기 (0) | 2025.01.18 |