python - 高效查询图结构

标签 python sql database postgresql

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

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

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

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

SELECT * FROM name_table WHERE Source = 'jack'

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

最佳答案

这应该会使您的查询速度更快。

在 table_name 源上创建索引 table_name_index_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 ]

在其 Documentation 中了解有关使用 PostgreSQL 建立索引的更多信息.

更新

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

关于python - 高效查询图结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11568336/

相关文章:

python - io 重定向的奇怪行为

sql-server - 数据库设计题。用于删除的 BIT 列

mysql - 无法连接到 XAMPP MySQL

python - uWSGI touch-reload 选项不起作用

python - Pandas 查找半小时数据帧索引的每日系列值

mysql - 如何在 2 列计数相等的情况下进行 INNER JOIN

mysql - 如何根据条件获取最后修改的行

mysql - 特定条件匹配后分组

php - 有人可以帮助找出这个 PHP 文件中语句的问题吗?

python - 线程 WebSocket 服务器中的 Ping 和 Pong (Python)