728x90
Index를 쓰는 이유: 조건을 만족하는 튜플(들)을 빠르게 조회하기 위해, 정렬, 그룹핑 하기 위해
Index 만들기
CREATE INDEX player_name_idx ON player(name);
CREATE UNIQUE INDEX team_id_backnumber_idx ON player(team_id, backnumber);
// multicolumn index, composite index
SHOW INDEX FROM player;
B-tree 기반 Index 동작 방식
index로 지정한 것 기준으로 Tree 구조로 만들어짐
EXPLAIN SELECT*FROM player WHERE backnumber = 7;
// 어떤 키를 사용하는 지 알 수 있음
직접 INDEX 고르기
SELECT * FROM player USE INDEX(backnumber_idx) where backnumber = 7;
SELECT * FROM player FORCE INDEX(backnumber_idx) where backnumber = 7; // 더 강하게
IGNORE INDEX도 사용 가능
INDEX는 막 만들어도 괜찮을까?
index 생성 시 추가 데이터 공간 발생, 오버헤드 만들어 질 가능성이 있음, table에 write 할 때마다 index도 변경 발생
Covering index
SELECT team_id, backnumber FROM player WHERE team_id = 5;
index 만으로 조회하는 attribute를 index 모두 cover 할 때 조회 성능이 더 빨라짐
Hash index
hash table을 사용해서 index 구현
시간 복잡도 O(1) 성능
rehashing에 대한 부담(데이터 사이즈를 늘려주는 것)
equality 비교만 가능, range 비교 불가능
multicolumn index의 경우 전체 attributes에 대한 조회만 가능
Full Scan이 더 좋은 경우
table에 데이터가 조금 있을 때
조회하려는 데이터가 테이블의 상당 부분을 차지할 때(SELECT*FROM customer WHERE mobile_carrier = 'SK')
'CS지식' 카테고리의 다른 글
스피링 부트 내장 톰캣 (0) | 2024.10.17 |
---|---|
락 (2) | 2024.10.10 |
InnoDB (0) | 2024.10.10 |
Nginx vs APACHE (1) | 2024.10.08 |
Cache & Redis (0) | 2024.10.07 |