2012-07-19 84 views
2

我有一个由图形组成的数据库。我需要访问表看起来像这样:高效查询图结构

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

这里Sno是主键。源和目标是2个非唯一的数字,代表我的图中节点之间的边。我的SourceDest也可能是字符串,不一定是数字数据类型。我的数据库中有大约500万条记录,我使用Postgresql和Psycopg2构建了它。

查询主键非常简单快捷。但是,我需要经常查询这个数据库中的所有dest特定源连接到。现在,我通过调用查询做到这一点:

SELECT * FROM name_table WHERE Source = 'jack' 

这被证明是非常低效的(高达每查询2秒),也没有办法,我可以做这个主键,因为它不是唯一。有什么方法可以根据这些重复值进行索引并快速查询它?

+1

你已经在'Source'字段设置了一个索引?正如这里解释的http://www.postgresql.org/docs/9.1/static/sql-createindex.html – fdomig 2012-07-19 20:00:16

+0

要设置一个索引,你需要把它作为主键的权利?它不需要唯一的密钥吗?如果不是我如何设置这个索引? – Amitash 2012-07-19 20:01:39

+2

您应该阅读我发布的文档。这告诉你*使用PostgreSQL进行索引时的一切*。 – fdomig 2012-07-19 20:03:27

回答

4

这应该会让你的查询快得多。

CREATE INDEX table_name_index_source ON table_name Source;

不过也有,你可以用

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 ] 

了解更多关于PostgreSQL的索引在他们Documentation很多选择。

更新

如果你的表是是你的,这将为肯定的帮助。但是,如果数据集越来越多,则应该考虑将模式更改为具有可以更高效地编入索引的唯一值。

+0

哇谢谢..这很快! – Amitash 2012-07-19 20:13:58