인덱스는 위와 같이 나뉘어져 있음
인덱스의 유형은 크게 Primary와 Secondary 로 나뉘어짐
책이 page 로 구성되어 있는 것처럼 SQL 서버도 Page로 구성되어있고,
가장 기본적인 단위로 실제 SQL 서버에서 데이터에 접근시에도 Page 단위로 접근함
Primary Index
Clustered Index 라고도 함
고정된 두 개의 필드값으로 구성된 인덱스
Index Page 를 키 값 과 데이터 페이지 번호 로 구성하고,
검색하고자하는 데이터의 키 값 으로 페이지 번호 를 검색하여 데이터를 찾음
책으로 비유하면 페이지를 알고 해당 페이지를 펼치는 것과 같음
- 특정 나열된 데이터들을 일정 기준으로 정렬해주는 인덱스
- 단순 색인을 추가하는 개념과는 다르게 숫자나 알파벳들의 순서대로 데이터 자체를 재배열하는 특징이 있음
- 한개의 테이블에 한개씩만 만들 수 있음
- Secondary index 보다 검색 속도는 더 빠르지만 입력/수정/삭제는 느림
- root page 와 root page 의 주소값을 받아서 실제데이터를 보관하는 data page 가 있음
과정
루트 페이지 -> 데이터 페이지
- 루트페이지에는 조회를 위해 사용할 대표적인 데이터와
그 데이터가 실제 저장된 페이지 주소를 보관 ( 이에 따른 분류 저장 단위 = 페이지 ) - 데이터 조회시, 루트 페이지에 보관된 페이지 주소를 참조
- 페이지를 조회하면, 실제로 가르키는 데이터 공간 ( 데이터페이지 ) 를 조회하여 데이터를 조회
Secondary index
Non-Clustered Index 라고도 함
물리적으로 데이터를 배열하지 않은 상태로 데이터 페이지가 구성
인덱스 자체의 리프 페이지는 데이터가 아니라 키 값 과 RID( 데이터가 위치하는 주소값 ) 로 구성하고,
데이터 직접 접근이 아닌 데이터 주소값을 통하여 데이터 접근을 함
책으로 비유하자면 목차에서 찾고자 하는 내용의 페이지를 찾고나서 해당 페이지로 이동하는것과 같음
- 책의 색인 페이지같이 인덱스 및 이에 따른 데이터 정렬 보관 공간을 추가로 사용
- 테이블 당 여러개 생성 가능
- Clustered Index 보다 검색 속도는 더 느리지만 데이터의 입력/수정/삭제는 덜 느림
- 함부로 사용할 경우에는 오히려 성능을 떨어뜨릴 수 있다
- Clustered Index와 다르게 root, leaf, data page 로 나뉘어져 있음
과정
루트 페이지 -> 리프 페이지 -> 데이터 페이지
- 찾고자 하는 데이터를 찾을 시, root 에서 해당 데이터 키워드를 가지고 있는 leaf 페이지 주소를 탐색
Clustered Index 와는 다르게 리프 페이지 에서 데이터를 바로 찾는게 아니라
해당 데이터를 가지고 있는 데이터 페이지의 주소값 및 그 페이지내의 위치값을 확인- 참조한 주소값을 통하여 실제 데이터를 조회
Clustered Index 와는 다르게리프 페이지 에서 주소를 한번 더 탐색 ( Clustered Index 보다 데이터 조회가 느림 )
차이점
Parameters | Clustered Index | Non-Clustered Index |
Use For | 물리적으로 행을 재배열 | 논리적으로 행을 재배열 (물리적으로 데이터 파일 포인터 활용 하며 재배열은 안함) |
Storing method | 인덱스의 리프 페이지에 데이터 페이지를 저장 | 인덱스의 리프 페이지에 데이터 페이지 저장 안함 |
Size | 용량 작다 | 용량 크다 |
Data accessing | Faster(빠름) | Clustered Index에 비해 느림 |
Additional disk space |
필요하지 않음 | 인덱스를 별도로 지정하는 데 필요 |
Type of Key | 기본적으로 테이블 Primary Key는 Clustered Index 사용 |
복합키 역할을 하는 데이블의 고유한 제약조건과 함께 사용 |
Main Feature |
데이터 검색 속도 향상 | 조인에 사용되는 열에 생성 |
N per TABLE | 테이블 당 1개 | 테이블 당 249개 |
engine | InnoDB | InnoDB |
Composite Index
결합 인덱스란 인덱스를 생성할 때 두 개 이상의 컬럼을 합쳐서 인덱스를 만드는 것을 말함
주 용도는 SQL에서 WHERE절의 조건 컬럼이 2개 이상 AND로 연결되어 함께 사용되는 경우에 많이 사용
단, OR로 조회되는 경우는 결합 인덱스를 만들면 안 됨
- 인덱스의 첫 번째 컬럼이 조건절에 없다면 일반적으로 인덱스가 사용되지 않음
- Equal 연산이 아닌 검색 조건이 들어오는 경우(범위 연산), 처리 범위가 크게 증가하여 효율이 크게 저하될 수 있음
Reference Path
'CS' 카테고리의 다른 글
B+Tree (0) | 2022.12.11 |
---|---|
Hash / Hash Table (0) | 2022.12.10 |
인덱스 Index (0) | 2022.12.02 |
마이크로서비스 아키텍처와 모놀리식 아키텍처 (0) | 2022.11.27 |
비즈니스 로직 Business Logic (0) | 2022.11.27 |