티스토리 뷰

개념/데이터베이스시스템

Indexing

상어악어 2022. 11. 11. 18:08
반응형

이 쿼리를 보면

full table scan이다

처음 행부터 마지막 행까지 다 본다

 

 

단점: slow

 

 

 

Indexing이라는 것이 있으면 

전체 체크를 안해도 빠르게 찾을 수 있다

 

 

most of database has this index

 

 

 

 

 

 

 

이런 느낌으로

index가 있으면 전체 데이터를 안 탐색하고

빠르게 찾을 수 있다

 

 

 

index is not bianry tree

It is B-Tree

 

 

B-Tree

 

 

 

 

Duration: Query를 처리하는 시간

Fetch: Result를 가져와서 보여주는 시간

 

 

 

 

 

 

 

EXPLAIN SELECT * FROM employees WHERE last_name = 'Peron';

EXPLAIN 키워드를 추가하면 추가적인 정보를 얻을 수 있다

 

 

possible_keys: 이 쿼리에 적합한 index 목록

key: index for this query

 

 

 

 

 

참고로 employees 테이블은 이렇게 생겼다

인덱스 생성 쿼리

CREATE INDEX last_name_index ON employees (last_name);

SELECT * FROM employees WHERE last_name= 'Peron';

 

 

인덱스 생성 전과 생성 후를 비교해보겠다

인덱스 생성 전 SELECT 쿼리는 0.1초정도 걸린다

 

인덱스 생성 후 SELECT 쿼리는 0.000초가 걸린다

 

 

 

 

 

인덱스 생성 전엔 전체 행을 탐색한다

 

 

 

인덱스 생성 후엔 해당 인덱스 행만 탐색한다

 

 

 

 

 

 

인덱스에 group by 적용했을때 결과

 

EXPLAIN SELECT last_name, COUNT(last_name) AS total
FROM prac1108.employees
GROUP BY first_name;

 

 

group by는 index를 생성해도  전체 행에 대해 수행하기때문에

결과가 이렇게 나온다

 

 

 

 

 

조회의 성능을 비교했을때

index가 있고 없고의 성능 차이가 엄청나다는 것을 깨달았다

 

 

다만 조회를 제외한

삽입, 수정, 삭제에서는 성능이 떨어져서

인덱스가 많을 수록 좋은 것은 아니다

 

 

 

 

 

 

 

 

 

반응형

'개념 > 데이터베이스시스템' 카테고리의 다른 글

Partition BY vs GROUP BY  (0) 2024.08.22
Advanced Queries  (0) 2022.10.26
Intermediate SQL QUIZ  (0) 2022.10.26
Basic SQL  (0) 2022.10.26
Relational Model  (0) 2022.10.26
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함