2020. 6. 17. 19:16ㆍ컴퓨터언어/Database
🙌 인덱스가 없는 것과 인덱스가 있는 것
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를 구성하기 위해, 한 릴레이션에서 어떤 속성을 선택할지의 문제
선택성이 좋다는 것은 수많은 데이터의 바다 속에서 내가 원하는 값만을 딱 집어올릴 수 있을 확률이 좋다는 것이다.
선택성이 좋으려면 분포도가 낮아야 한다.
분포도가 낮다는 것은 자료가 밀집되어 있지 않고 중복이 적다는 뜻이다.
*분포도가 높은 예 : 남자/여자로 나누는 경우 모집단의 반반으로 나뉘는 것 말고는 별 소득이 없을 것이다.
분포도가 높다 = 선택성이 나쁘다 = 인덱스로 사용하기 안좋다
선택성이 좋다 = 분포도가 낮다 = 인덱스로 사용하기 좋다
'컴퓨터언어 > Database' 카테고리의 다른 글
[SQL] DBA가 DBMS와 대화하는 언어 (0) | 2020.06.18 |
---|---|
[관계 데이터 연산] 관계형 데이터베이스의 이론적 기반 - 관계대수, 관계해석 (0) | 2020.06.18 |
[View 설계 & Index 구축] 반정규화를 하기 전 고려해야 할 선택지 (0) | 2020.06.17 |
[반정규화] 논리적 설계에서의 정규화가 오히려 독일 때 (0) | 2020.06.17 |
[정규화] 효율적인 데이터베이스 스키마 구축 2 (0) | 2020.06.17 |