이하는 정처기 공부+추가적으로 학습한 내용
https://gwang920.github.io/database/clusterednonclustered/ 참고
인덱스는 데이터 레코드를 빠르게 접근하기 위해 <키 값, 포인터> 쌍으로 구성되는 자료구조이다. 이 인덱스에는 대상 테이블에 있는 하나 이상의 열로 작성되는 키를 포함한다. 그리고 이 키값은 SQL SERVER에서 B-Tree의 자료구조로 저장된다.
인덱스를 통해 파일의 레코드에 빠르게 액세스하는 것이 인덱스를 DB에 도입하는 목표임.
쉽게 생각하면 책 맨 앞에 소주제별로 페이지를 기록해놓는 인덱스 페이지를 DB에 도입하는 것과 같다.
인덱스의 포인터는 목표한 테이블의 레코드가 저장된 물리적 구조에 접근하는 방법을 제공한다.
💡인덱스는 DDL(Data Definition Language)를 통해 사용자가 생성, 변경, 제거할 수 있다.
💡그런데 레코드의 삽입과 삭제가 수시로 일어나는 경우에는, 인덱스의 개수를 최소로 하는게 효율적이다. 왜?
인덱스를 제대로 활용하려면 인덱스를 항상 최신의 정렬된 상태로 유지해야 한다. 그런데 인덱스가 적용된 컬럼에 INSERT, UPDATE, DELETE가 수시로 실행된다면 다음의 오버헤드가 발생하기 때문
- INSERT : 새로운 데이터에 대한 인덱스 추가
- DELETE : 삭제하는 데이터의 인덱스를 사용하지 않음을 명시
- UPDATE : 기존의 인덱스를 사용하지 않음 처리, 갱신된 데이터에 인덱스 추가
인덱스가 없다면 특정한 값을 찾기 위해서 모든 데이터 레코드를 다 뒤져보는 일이 생긴다. 이를 Full table Scan이라고 한다.
PK를 위한 인덱스를 기본 인덱스라고 하고, 기본 인덱스가 아닌 다른 인덱스를 보조 인덱스라고 한다.
대부분의 RDBMS에서는 모든 기본 키에 대해 자동적으로 기본 인덱스를 생성한다.
인덱스 키 순서에 따라 데이터가 정렬되어 저장되는 방식.