인덱스가 뭐고 왜 필요한가?
인덱스는 table의 검색 성능을 높여주는 대표적인 방법중 하나입니다. 관계형데이터베이스에서는 B+tree 구조로 된 index를 사용하여 검색속도를 향상시킵니다.
인덱스를 생성하게되면 특정 column의 값을 기준으로 정렬하여 데이터의 물리적 위치와 함께 별도 파일에 저장합니다. 인덱스에 저장되는 속성 값을 search-key라고하고 실제 데이터의 물리적 위치를 저장한 값을 pointer라고 합니다.
쉽게말해 인덱스는 특정 열을 search-key 값으로 설정하여 search-key를 기준으로 정렬하여 (search-key, pointer)를 별도 파일에 저장한 것입니다.
인덱스 사용하는 이유
인덱스 없이 table에 데이터를 계속 저장하면 순서없이 싸이게 됩니다. 이때 만족하는 데이터를 찾으려면 처음부터 끝까지 모두 접근하여 비교를 해야하지만 index를 생성해 놓은 경우 검색 속도가 매우 빨라집니다.
클러스터링 인덱스
- primary key를 지정하면 search key가 primary key가 되고 pointer와 함께 인덱스로 저장된다
보조 인덱스
- 인덱스를 CREATE INDEX를 사용해서 생성 지정한 열이 search key가 된다.
ex) CREATE INDEX idx_name ON Student (이름);
인덱스 장점
- 검색 속도 향상
인덱스 단점
- 추가 저장공간 필요 (인덱스를 저장할 공간이 따로 필요)
- 느린 데이터 변경 작업 (데이터가 추가 삭제 될 때마다 트리의 구조가 변경될수 있기 때문)
그럼 인덱스는 어떤 컬럼(열)에 사용하면 좋을까? (SELECT WHERE 절에 자주 사용되는 Colum에 사용)
자주 조회되고 수정 빈도가 낮으며 중복이 적은 (예를들어 주민등록번호) 열을 선택하는게 중요하다
'CS Study' 카테고리의 다른 글
[자료구조] BST (0) | 2024.10.15 |
---|---|
[네트워크] 주소창에 주소를 쳤을 때의 과정 (0) | 2024.10.15 |
[데이터베이스] DeadLock (0) | 2024.10.14 |
[데이터베이스] Transaction (0) | 2024.10.14 |
[네트워크] GET vs POST (0) | 2024.10.12 |