SQL 데이터베이스에서는 Heap과 Index와 같은 다양한 방법을 사용하여 데이터를 저장할 수 있습니다. 각각에 대해 살펴본 다음 그 관계를 살펴보겠습니다.
Heap: 힙 기반 저장 구조에서 데이터는 테이블 내에 정렬되지 않은 레코드 모음으로 저장됩니다. 레코드는 특별한 순서 없이 테이블에 삽입되며 디스크에 물리적으로 배치되는 위치도 임의로 지정할 수 있습니다. 새 레코드가 삽입되면 단순히 테이블 끝에 추가됩니다.
Index: 인덱스는 데이터 검색 효율성을 높이기 위해 테이블의 하나 이상의 열에 생성되는 별도의 구조입니다. 인덱스는 데이터베이스 엔진이 인덱싱된 열의 값을 기반으로 원하는 행을 빠르게 찾을 수 있도록 하는 로드맵 역할을 합니다. 인덱스는 일반적으로 B-트리 또는 B+ 트리와 같은 균형 잡힌 트리 구조로 구현됩니다.
이제 힙과 인덱스의 관계를 이해해 보겠습니다:
인덱스가 없는 힙: 데이터가 인덱스 없이 힙에 저장된 경우, 데이터베이스 엔진은 특정 레코드를 찾기 위해 전체 테이블 스캔을 수행해야 합니다. 원하는 데이터를 찾을 때까지 테이블의 각 레코드를 순차적으로 스캔합니다. 이는 특히 큰 테이블을 처리할 때 속도가 느리고 비효율적일 수 있습니다.
인덱스가 있는 힙: 힙 기반 테이블의 하나 이상의 열에 인덱스가 생성되면 특정 레코드를 더 빠르게 찾을 수 있습니다. 인덱스에는 힙의 실제 레코드에 대한 포인터와 함께 인덱싱된 열의 복사본이 포함됩니다. 인덱스 구조를 탐색하면 데이터베이스 엔진이 원하는 데이터를 더 효율적으로 찾을 수 있으므로 전체 테이블 스캔의 필요성이 줄어듭니다.
인덱스 설정 시 데이터 수정: 힙 기반 테이블에서 데이터를 수정할 때(예: 레코드 삽입, 업데이트 또는 삭제) 데이터 일관성을 유지하기 위해 힙과 관련된 인덱스가 모두 업데이트되어야 한다는 점에 유의해야 합니다. 즉, 인덱스가 있는 경우 그에 따라 인덱스를 조정해야 하므로 데이터 수정 속도가 느려질 수 있습니다.
요약하면, 힙은 데이터가 물리적으로 저장되는 정렬되지 않은 저장 구조이고 인덱스는 특정 레코드를 더 빠르게 찾을 수 있는 방법을 제공하여 데이터 검색 효율성을 향상시키는 별도의 구조입니다. 인덱스와 힙은 서로 연결되어 있으며, 인덱스는 힙의 레코드를 참조합니다. 인덱스를 사용하면 데이터 수정 시 복잡성과 오버헤드가 증가하는 대신 데이터 검색 작업의 속도를 크게 높일 수 있습니다.