我有一个postgres数据库,其中有一个表列出了图中的所有节点,还有一个表列出了这些节点之间的所有边。我希望能够做的是指定所有节点的子集,然后检索这些节点之间的所有边。
边表有两列用于指示它连接的节点:left_node
和right_node
中的至少一个。因此,对边的查询必须返回left_node * 和 * right节点都在指定的节点集中的边。如果有100个节点,但我感兴趣的是其中20个节点之间的连接。
我创建了下面的查询,检查每个节点是否在集合中。它能工作,但不能扩展;对于460万条边和一组仅10个节点,查询需要3分钟(macbook pro M1 32 GB内存)。我需要扩展到+100,000个节点
有没有更好的方法来做到这一点?
-- edge query
edge_query = """
select *
from edges ed
where ed.left_node_id in ({})
and ed.right_node_id in ({})
"""
-- execute query in pandas (or your favourite dbase ide)
import pandas.io.sql as sqlio
edges_retrieve = sqlio.read_sql(edge_query.format(<text_nodes_list>),<connection>)
字符串
1条答案
按热度按时间pwuypxnk1#
要提高性能,请将IN子句()中的集合加载<text_nodes_list>到表中。另外,在where子句中使用的列上创建索引。