2010-12-01 7 views
21

나는 기본 키가 아니며 (있을 수도있는) 2 개의 열을 가지고 있지만 많은 검색을하고 다른 테이블에서 2 개의 열과 동일한지 비교되는 Postgres 데이터베이스를 가지고있다.Postgres에서 사용할 색인의 유형을 결정하는 방법은 무엇입니까?

저는 이것이 내 테이블에 색인을 추가하는 완벽한 경우라고 생각합니다. 나는 전에 데이터베이스에서 인덱싱을 사용하지 않았으므로 이것을하기위한 올바른 방법을 배우려고합니다.

내가 선택할 수있는 여러 유형의 색인이 있음을 알았습니다. 내 데이터베이스에서 가장 효과적인 방법을 어떻게 결정합니까? 또한 적절한 방법은 두 열을 모두 포함하는 단일 색인을 만드는 것입니까?

답변

18

Postgres는 B-tree, R-tree, Hash, GiST 및 GIN 색인 유형을 지원합니다. B- 트리 색인 생성은 가장 보편적이며 가장 일반적인 시나리오에 적합합니다.

다음
CREATE INDEX idex_name ON table_name USING btree(column1, column2); 

createindex 문서이며 여기에 포스트 그레스 다른 indextypes에 대한 추가 정보를 원하시면입니다 :이 구문입니다.

사용할 인덱스 유형은 수행 할 작업 유형에 따라 다릅니다. 평등성 검사를 원할 경우 해시 색인이 가장 좋습니다. 일반적인 작업 (예 : 비교, 패턴 일치)의 경우 B-tree를 사용해야합니다. 개인적으로 GiST 또는 GIN 색인 생성을 사용한 적이 없습니다. 밖에있는 구루?

설명서에 이러한 모든 유형이 설명되어 있습니다. 그들은 나보다 더 잘 당신을 도울 수 있습니다 :)

희망이 도움이됩니다.

+0

감사합니다. 제 질문이 조금만 업데이트되었습니다. 나는 해시 인덱스가 최고 일 것이라고 추측하고 있으므로 실제로는 평등을 찾고 있습니다. – Kellenjb

+2

해시가 여러 열에서 작동하지 않는 것을 스크래치합니다. 두 개의 별도 해시가 더 빨라지고 하나의 단일 B- 트리가 있는지 보려면 몇 가지 실험을해야합니다. – Kellenjb

+11

일반적으로 해시 인덱스를 사용하지 않으려합니다. 페이지 9.1 문서 : "해시 인덱스 작업은 현재 WAL 로깅되지 않으므로 데이터베이스 충돌 후 해시 인덱스를 REINDEX로 다시 작성해야 할 수 있으며 스트리밍 또는 파일 기반 복제를 통해 복제되지 않습니다. 이러한 이유로 해시 색인 사용은 현재 권장되지 않습니다. " –

3

queryplanner도 이해하십시오. PostgreSQL의이 부분은 색인과 함께 작동해야하기 때문입니다. EXPLAIN ANALYZE는 질의를 최적화하는 데 필수적입니다.

관련 문제