2

我有一个由图表组成的数据库。我需要访问的表如下所示:

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

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

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

SELECT * FROM name_table WHERE Source = 'jack'

事实证明这非常低效(每个查询最多 2 秒)并且我无法将其设为主键,因为它不是唯一的。有没有什么方法可以根据这些重复的值建立索引并快速查询?

4

1 回答 1

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 进行索引的更多信息。

更新

如果你的桌子和你的一样,这肯定会有所帮助。但是,如果您的数据集正在增长,您可能应该考虑更改架构以具有可以更有效地索引的唯一值。

于 2012-07-19T20:06:27.557 回答