当前位置: 首页 > 知识库问答 >
问题:

Cypher neo4j-在集合上使用子句'in'的查询非常慢

贾沛
2023-03-14
  1. 键->字符串
  2. principal_name->string
  3. 别名->字符串集合
  4. .......

我还在principal_name、别名和key上添加了索引

当我试图导入Article类型节点和Author类型节点之间的关系时,问题就出现了。

articleKey,authorName
USING PERIODIC COMMIT 1000
LOAD CSV WITH HEADERS FROM "file:///myPath.csv" AS line
MATCH (art:Article{key: line.key1})
MATCH (auth:Author) WHERE line.key2 IN (auth.alias)
CREATE UNIQUE (auth)-[:AUTHOR_OF]->(art);
MATCH (auth:Author{principal_name: line.key2})
IF auth null THEN
  MATCH (auth:Author) WHERE line.key2 IN (auth.alias)
END

有办法用Cypher做到这一点吗?

共有1个答案

路伟
2023-03-14

如果更改了模型,使author节点的所有名称(主体名称和所有别名)都位于单独的name节点中,如下所示:

(auth:Author)-[:HAS_NAME]->(name:Name {name: 'Fred McGillicutty'})

那么查询将是:

USING PERIODIC COMMIT 1000
LOAD CSV WITH HEADERS FROM "file:///myPath.csv" AS line
MATCH
  (art:Article { key: line.key1 }),
  (auth:Author)-[:HAS_NAME]->(name:Name { name:line.key2 })
CREATE (auth)-[:AUTHOR_OF]->(art);

如果在:article(key):name(name)上创建索引,该查询应该非常高效。

 类似资料:
  • 问题内容: 我有一个表,其中有一个索引(A列,B列)。我正在运行一个查询,如下所示: 这个查询很慢!该计划如下所示: Postgres似乎没有一次对5000个值进行一次索引扫描,而是一次对5000个值进行了一次索引扫描,这解释了为什么查询如此缓慢。 实际上,这样做是更快的方法: 获取结果,然后在应用程序内的B列上进行过滤(python)。 我真的更希望结果已经由Postgres在合理的运行时间下进

  • 问题内容: 我有一个MySQL查询(Ubu 10.04,Innodb,Core i7、16Gb RAM,SSD驱动器,优化的MySQL参数): 表em_link_data有大约700万行,em_link有数千行。此查询大约需要 18秒 才能完成。但是,如果我替换子查询的结果并执行以下操作: 那么查询将在不到1毫秒的时间内运行。仅子查询在不到1毫秒的时间内运行,因此索引了列linkid。 如果我将查

  • 问题内容: 我们正在尝试为本地sql查询动态生成IN子句以返回JPA实体。Hibernate是我们的JPA提供程序。我们的代码看起来像这样。 这是行不通的,in子句无法识别通过这种方式传入的任何值。有谁知道解决这个问题的方法吗? 问题答案: 在您的情况下,JPA支持命名列表参数:

  • 问题内容: 我正在寻找使用sqlalchemy执行此查询。 我只想要喜欢(薰衣草和扁豆汤)或(黑胡萝卜汁)的孩子。另外,这可能是大量喜欢的颜色和食物的列表(可能> 10K),因此,我想分批进行。 问题答案: 您需要构造:

  • 我有一个类Api,它包含一个数据列表:

  • 我正在尝试从我的Java项目中执行以下查询。我正在使用MySQL和数据存储,并已将Hikari CP配置为数据源。 MySQL连接字符串: 当我从MySQL workbench执行同样的查询时,它在0.5秒内返回结果。 然而,当我在JPA存储库或Spring JDBC模板中执行相同的操作时,几乎需要50秒的时间。 此查询有2个IN子句,其中状态集合只有3个项目,而标识值集合有10000个项目。 当