Spanner는 쿼리 성능을 개선하기 위해 여러 유형의 색인을 제공합니다. 스키마 및 쿼리 패턴에 적합한 색인 유형을 선택하는 것은 특히 지리적 파티셔닝을 사용하는 데이터베이스의 경우 매우 중요합니다. 이 페이지에서는 다양한 색인 유형의 이점과 지역 파티셔닝을 사용하여 Spanner 색인을 선택하고 사용하는 권장사항을 설명합니다.
색인 유형
Spanner는 전역, 로컬, 원격 색인을 지원합니다. 각 유형은 성능 특성과 사용 사례가 다릅니다. 지리적 파티셔닝 데이터베이스의 경우 이러한 색인 유형을 이해하는 것이 중요합니다. 적절한 인덱스를 선택하면 데이터베이스 스키마와 쿼리를 최적화할 수 있으며, 이는 지역 파티셔닝된 데이터베이스의 지연 시간을 크게 개선할 수 있습니다. 지역 파티셔닝을 사용하지 않는 데이터베이스의 경우 이러한 인덱스 유형은 모두 기본 배치에 저장되고 성능 특성이 유사하므로 이해하는 것이 덜 중요합니다.
전역 색인
전역 색인은 Spanner의 기본 색인 유형입니다. 색인 데이터는 테이블의 데이터와 동일한 위치에 있지 않을 수 있는 기본 파티션에 저장됩니다. 지리적 파티션 테이블에 전역 색인을 만들면 색인이 생성된 열과 관련된 쓰기의 쓰기 지연 시간이 크게 늘어날 수 있습니다. 특히 색인의 기본 파티션 쓰기 쿼럼이 쓰기 대상 테이블 행의 쓰기 쿼럼과 멀리 떨어져 있는 경우에 그렇습니다. 읽기 임대 리전 또는 비활성 읽기와 함께 가까운 읽기 전용 복제본을 사용하여 전역 색인의 읽기 지연 시간을 완화할 수 있습니다.
전역 색인에는 다음과 같은 특징이 있습니다.
- 이러한 색인은 그렇지 않으면 전체 테이블 스캔이 필요한 쿼리의 속도를 높이고 위치와 관계없이 모든 테이블 행에서 고유성을 적용합니다.
- 데이터베이스 전체에서 고유한 값이 필요한 열에 적합합니다.
- 색인화된 열을 기준으로 필터링하거나 정렬하는 쿼리의 속도를 높입니다.
다음은 전역 고유 색인의 예입니다.
CREATE UNIQUE INDEX idx_customer_email ON customer(email);
로컬 색인
로컬 색인은 색인이 생성된 테이블의 상위 계층 구조에서 인터리브 처리됩니다. 기본 키 열 이름과 유형은 색인이 생성된 테이블과 일치해야 합니다.
로컬 색인의 특징은 다음과 같습니다.
색인 데이터는 색인이 생성된 데이터와 동일한 파티션에 저장됩니다. 쓰기 지연 시간은 기본 배치 쓰기 쿼럼이 아닌 특정 배치의 쓰기 쿼럼에 따라 달라집니다.
인덱스와 테이블 데이터가 모두 동일한 배치에 있으므로 특정 키 접두사를 타겟팅하는 쿼리의 지연 시간이 가장 짧습니다.
로컬 색인을 만들려면 상위 테이블에서 색인을 인터리브 처리하세요. UNIQUE 로컬 색인을 사용하는 경우 고유성은 전체 테이블이 아닌 특정 상위 행 내에서만 적용됩니다.
다음은 상위 테이블 locations에 인터리브 처리된 테이블 customer에 로컬 색인을 만드는 예입니다.
GoogleSQL
-- Create locations placement table
CREATE TABLE locations (
location STRING(MAX) NOT NULL PLACEMENT KEY,
) PRIMARY KEY(location);
-- Create customer table interleaved in the locations table
CREATE TABLE customer (
location STRING(MAX) NOT NULL,
customerId INT64 NOT NULL,
email STRING(MAX),
webcookie STRING(64),
) PRIMARY KEY(location, customerId), INTERLEAVE IN PARENT locations;
-- Create a local index on the interleaved customer table
CREATE INDEX idx_customer_email_local ON customer(location, email),
INTERLEAVE IN locations;
PostgreSQL
-- Create locations placement table
CREATE TABLE locations (
location varchar NOT NULL PLACEMENT KEY PRIMARY KEY
);
-- Create customer table interleaved in the locations table
CREATE TABLE customer (
location varchar NOT NULL,
customerId BIGINT NOT NULL,
email varchar(1024),
webcookie varchar(64),
PRIMARY KEY(location, customerId)
)