MySQL
select * from customer where first_name = 'gildong';
first_name에 index가 걸려있다면?
full scan(table scan)보다 더 빨리 찾을 수 있다!
O(N) -> O(logN) (B-tree based index)
Index를 쓰는 이유
- 조건을 만족하는 튜플(들)을 빠르게 조회하기 위해!
- 빠르게 정렬(order by)하거나 그룹핑(group by) 하기 위해!
Primary Key에는 index가 자동 생성된다.
INDEX name_idx (name),
UNIQUE INDEX team_id_backnumber_idx (team_id, backnumber) <= multicolumn index(composite index)
INDEX backnumber_idx (backnumber)
SELECT * FROM player USE INDEX (backnumber_idx) WHERE backnumber = 7;
SELECT * FROM player FORCE INDEX (backnumber_idx) WHERE backnumber = 7;
쿼리가 어떤 인덱스를 쓰는지 확인하기
EXPLAIN SELECT * FROM player WHERE backnumber = 7;
INDEX는 막 만들어도 괜찮을까??
* table에 write 할 때마다 index도 변경 발생
* 추가적인 저장 공간 차지
* 불필요한 index를 만들진 말자
Covering Index
* 조회하는 attribute(s)를 index가 모두 cover할 때
* 조회 성능이 더 빠름
SELECT team_id, backnumber FROM player WHERE team_id = 5;
Full scan이 더 좋은 경우
* table에 데이터가 조금 있을 때 (몇 십, 몇 백건 정도?)
* 조회하려는 데이터가 테이블의 상당 부분을 차지할 때
SELECT * FROM customer WHERE mobile_carrier ='SK';
참고자료 :
'DataBase 베이스' 카테고리의 다른 글
| VARCHAR vs TEXT for Index (MySQL) (0) | 2024.03.27 |
|---|