[Index, 선택성] 데이터베이스가 데이터를 빠르게 검색하는 방법

2020. 6. 17. 19:16컴퓨터언어/Database

728x90
반응형

🙌 인덱스가 없는 것과 인덱스가 있는 것

FTS(Full Table Scan) : 인덱스 없이 모든 테이블을 샅샅이 조회하는 것으로, 그냥 많은 정보를 찾을 때 유리함

Index Scan : 인덱스를 사용하여 범위를 좁혀가는 것으로, 최종 몇 개의 정보를 찾을 때 유리함


🙌 DB에서 실제 데이터를 저장하는 단위를 "page(8kb)"라고 한다.

🙌 Index 구축에는 두가지 방법이 있다.

 

👍 Clustered Index

각 page의 첫번째 데이터를 인덱스로 하여 Index Root에 모아 놓은 뒤, 정보가 필요하면 해당 page로 바로 이동하여 탐색

어떤 속성이 Clustered Index로 지정되면, 그 속성 기준으로 데이터와 page가 실제로 새로 정렬되어 저장됨(주로 기본키).

Index Root Level -> Index Leaf Level(=Data Page)로 구성

정렬되기 때문에 한 테이블에 한 개의 Clustered Index만 존재할 수 있음.

Non-clustered Index보다 빠르고 저장공간 효율이 좋지만, 하나밖에 못 만든다는 단점이 있음.

 

👍 Non-clustered Index

데이터와 page는 원본 그대로 가지고 있고, 해당 위치정보만 인덱스로 만듬.

Index Root Level -> Index Leaf Level -> Data Page로 구성되어 있기 때문에, Clustered Index에 비해 한 층 더 많아 속도가 느리고, 인덱스 저장 공간도 더 필요함.

실제 데이터는 정렬되지 않기 때문에 Index를 여러 개 만들 수 있음.


🙌 선택성(Selectivity) : Index를 구성하기 위해, 한 릴레이션에서 어떤 속성을 선택할지의 문제

 

선택성이 좋다는 것은 수많은 데이터의 바다 속에서 내가 원하는 값만을 딱 집어올릴 수 있을 확률이 좋다는 것이다.

선택성이 좋으려면 분포도가 낮아야 한다.

분포도가 낮다는 것은 자료가 밀집되어 있지 않고 중복이 적다는 뜻이다.

*분포도가 높은 예 : 남자/여자로 나누는 경우 모집단의 반반으로 나뉘는 것 말고는 별 소득이 없을 것이다.

 

분포도가 높다 = 선택성이 나쁘다 = 인덱스로 사용하기 안좋다

선택성이 좋다 = 분포도가 낮다 = 인덱스로 사용하기 좋다

728x90
반응형