2012-07-19 4 views
2

그래프로 구성된 데이터베이스가 있습니다. 내가 액세스해야 표는 다음과 같습니다그래프 구조를 효율적으로 쿼리합니다.

여기
Sno Source Dest 
1  'jack' 'bob' 
2  'jack' 'Jill' 
3  'bob' 'Jim' 

Sno는 기본 키입니다. 원본과 대상은 내 그래프의 노드 사이의 가장자리를 나타내는 비 고유 숫자 2 개입니다. 내 SourceDest은 문자열 일 수도 있고 반드시 숫자 데이터 유형 일 필요는 없습니다. 내 데이터베이스에 약 500 만 항목이 있고 나는 Python을 위해 Psycopg2와 함께 PostgreSQL을 사용하여 구축했습니다.

기본 키를 쿼리하는 것은 매우 쉽고 빠릅니다. 그러나 특정 소스가 연결된 dest에 대해이 데이터베이스를 자주 쿼리해야합니다. 지금 내가 쿼리 호출하여이를 달성 :이 고유하지 않습니다으로

SELECT * FROM name_table WHERE Source = 'jack' 

이 매우 비효율적 인 것으로 판명를 (2 쿼리 당 초까지) 나는이 기본 키를 만들 수있는 방법은 없습니다 . 이러한 반복 된 값을 기반으로 색인을 만들고이를 빠르게 쿼리 할 수있는 방법이 있습니까?

+1

'소스'필드에 색인을 설정 했습니까? 여기에 설명 된대로 http://www.postgresql.org/docs/9.1/static/sql-createindex.html – fdomig

+0

색인을 설정하려면 기본 키로 설정해야합니다. 고유 한 키가 필요하지 않습니까? 이 색인을 설정하지 않으면 어떻게됩니까? – Amitash

+2

게시 한 문서를 읽어야합니다. 이것은 PostgreSQL을 이용한 인덱싱에 대해 * 모든 것을 알려줍니다. – fdomig

답변

4

이렇게하면 쿼리가 훨씬 빨라집니다.

CREATE INDEX table_name_index_source ON table_name Source;

그러나 당신이 그들의 Documentation에 PostgreSQL을 가진 색인 대해 자세히 알아

PostgreSQL의 문서

CREATE [ UNIQUE ] INDEX [ CONCURRENTLY ] [ name ] ON table [ USING method ] 
    ({ column | (expression) } [ COLLATE collation ] [ opclass ] [ ASC | DESC ] [ NULLS { FIRST | LAST } ] [, ...]) 
    [ WITH (storage_parameter = value [, ... ]) ] 
    [ TABLESPACE tablespace ] 
    [ WHERE predicate ] 

를 사용할 수있는 여러 옵션이 있습니다.

업데이트

테이블 인 경우 당신 같은 작은, 확실히 도움이 것이다. 그러나 데이터 집합이 커지면 고유 한 값을 갖는 스키마 변경이 더 효율적으로 인덱싱 될 수 있다고 생각해야합니다.

+0

와우 감사합니다. 그것은 빠릅니다! – Amitash

관련 문제