INDEX
- Index는 테이블에서 특정 찾기 작업을 빠르게 수행하기 위해서 MySQL이 별도로 만드는 데이터 구조를 말함
- 컬럼별로 만들어짐
- PK나 FK로 지정된 컬럼은 기본적으로 Index를 갖게됌
- 특정 컬럼을 바탕으로 자주 검색시 Index 생성은 큰 도움이 될 수 있음
- SELECT / DELETE / JOIN 빠르게 하고 INSERT / UPDATE는 느리게 함
- 테이블에 너무 많은 INDEX를 추가하면 인덱스의 로딩으로 인한 오버헤드로 인해 시스템이 전체적으로 느려질 수 있음
CREATE TABLE ryu_index (
id int NOT NULL auto_increment,
user_id int not NULL,
created timestamp not NULL default CURRENT_TIMESTAMP,
channel_id int not NULL,
PRIMARY KEY(id),
FOREIGN KEY(channel_id) references channel(id),
INDEX user_id(user_id)
);
결론
- 인덱스는 열 단위에 생선된다
- WHERE절에서 사용되는 열에 인덱스를 만들어야 한다
- 테이블 조회시에 인덱스를 사용하는 경우는 WHERE 절의 조건에 해당 열이 나오는 경우에만 주로 사용
- WHERE절에 사용되더라도 자주 사용해야 가치가 있다
- 데이터의 중복도가 높은 열은 인덱스를 만들어도 별 효과가 없다
- 외래 키를 지정한 열에는 자동으로 외래 키 인덱스가 생성된다
- JOIN에 자주 사용되는 열에는 인덱스를 생성해 주는 것이 좋다
- INSERT/UPDATE/DELETE가 얼마나 자주 일어나는지 고려해야 한다.
- 읽기에서만 성능을 향상시키며, 데이터의 변경에서는 오히려 부담을 줌
- 클러스터형 인덱스는 테이블당 하나만 생성할 수 있다
- 클러스터형 인덱스가 테이블에 아예 없는 것이 좋은 경우도 있다
- 사용하지 않는 인덱스는 제거하자
'Database > MySql' 카테고리의 다른 글
[MySQL] Stored Procedure/Function/Trigger (0) | 2024.07.31 |
---|---|
[MySQL] View (0) | 2024.07.30 |
[MySQL] JOIN~~ (0) | 2024.07.30 |
[MySQL] 지원 함수 (0) | 2024.07.30 |
[MySQL] 기본 문법 (0) | 2024.07.30 |