Secondary Index (보조 인덱스)
데이터베이스에서 보조 인덱스를 사용하는 주요 목적은 데이터 액세스 성능을 향상시키는 것입니다.
보조 인덱스는 테이블의 기본 키가 아닌 열에 구축되는 인덱스입니다.
기본 인덱스는 테이블의 기본 키를 기반으로 하고 데이터에 대한 링크를 제공하지만,
보조 인덱스는 다른 열에 구축 되어, 해당 열을 기반으로 데이터에 더 빠르게 액세스 할 수 있습니다
특징
장점
- 데이터 검색 속도 향상: 보조 인덱스는 특정 열을 기반으로 데이터를 정렬하여 검색 속도를 높여줍니다.
- 쿼리 성능 향상: 보조 인덱스를 생성함으로써 WHERE 절이나 JOIN 조건에서 자주 사용되는 열에 대한 쿼리의 성능을 향상시킬 수 있습니다.
단점
- 저장 공간: 생성하는 각 인덱스에는 추가 저장 공간이 필요합니다.
- 쓰기 성능:
- 행이 삽입되거나 업데이트될 때마다 테이블의 모든 인덱스도 업데이트되어야 합니다.
- 이로 인해 특히 쓰기 작업이 많은 큰 테이블이나 테이블에서 쓰기 작업 속도가 느려질 수 있습니다.
예제
“Users” 테이블이 다음과 같은 구조를 가지고 있다고 가정해봅시다:
CREATE TABLE Users (
UserID int PRIMARY KEY,
FirstName varchar(255),
LastName varchar(255),
Email varchar(255) UNIQUE,
DateOfBirth date
);
이 테이블에서 UserID
는 기본 키로, 이에 대한 기본 색인이 자동으로 생성됩니다.
이 색인은 UserID
를 알고 있는 상황에서 사용자의 데이터를 빠르게 접근하는데 도움이 됩니다.
이제 Email
을 기반으로 사용자를 찾아야 하는 경우를 자주 겪는다고 상상해보세요.
Email
필드에 보조 색인이 없다면, 데이터베이스 시스템은 테이블의 모든 행을 스캔하여 Email
이 주어진 값과 일치하는 행을 찾아야 합니다.
이 과정은 큰 테이블에서는 매우 느릴 수 있습니다.
이러한 쿼리를 가속화하기 위해 Email
필드에 보조 색인을 생성할 수 있습니다:
CREATE INDEX idx_email ON Users (Email);
이제 다음과 같은 쿼리를 수행할 때:
SELECT * FROM Users WHERE Email = 'johndoe@example.com';
데이터베이스 시스템은 idx_email
보조 색인을 사용하여 Email
이 'johndoe@example.com’인 행을 빠르게 찾을 수 있습니다.
이는 테이블의 모든 행을 스캔할 필요가 없기 때문에 훨씬 빠른 쿼리 실행 시간을 가져옵니다.
마찬가지로, DateOfBirth
를 기준으로 사용자를 정렬하는 쿼리를 자주 수행하는 경우, 이러한 쿼리를 가속화하기 위해 해당 열에 보조 색인을 생성할 수 있습니다:
SELECT * FROM Users ORDER BY DateOfBirth;
따라서, 위의 쿼리는 훨씬 더 빠르게 실행될 수 있습니다.
왜냐하면 idx_dob
색인이 DateOfBirth
별로 정렬된 사용자 목록을 제공하기 때문입니다.
레퍼런스
부족한 점이나 잘못 된 점을 알려주시면 시정하겠습니다 :>
'DEV > Backend' 카테고리의 다른 글
TypeORM의 Entity 참조는 어떻게 일어나는가? (0) | 2023.06.27 |
---|---|
조회 vs Join 무엇이 더 효율적인가 (0) | 2023.06.27 |
SA (0) | 2023.06.10 |
ESP (0) | 2023.06.10 |
Write Lock과 Read Lock (0) | 2023.06.10 |