본문 바로가기
DataBase 베이스

DB 쿼리 속도를 높이는데 너무나도 중요한 index

by eddy0223 2023. 10. 18.

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';

 

 

 

참고자료 :

https://www.youtube.com/watch?v=IMDH4iAQ6zM

'DataBase 베이스' 카테고리의 다른 글

VARCHAR vs TEXT for Index (MySQL)  (0) 2024.03.27