Skip to content

Instantly share code, notes, and snippets.

@vladbatushkov
Last active June 30, 2020 16:33
Show Gist options
  • Save vladbatushkov/99d4078c4817ed790f5b32eaa375ef0b to your computer and use it in GitHub Desktop.
Save vladbatushkov/99d4078c4817ed790f5b32eaa375ef0b to your computer and use it in GitHub Desktop.
Explore rels same-name issue on query performance.

Relationships

10k Posts, 2 Tags, 1 Emoji. Explore impact of :CONTAINS rel on query.

Option 1

Schema: (:Emoji)<-[:CONTAINS]-(:Post)-[:CONTAINS]->(:Tag)

Creation:

MATCH (n) DETACH DELETE n; 
CREATE (:Tag { value: "neo4j" });
CREATE (:Tag { value: "cypher" });
CREATE (:Emoji { value: "smile" });
MATCH (a:Tag { value: "neo4j" })
MATCH (b:Emoji { value: "smile" })
WITH a, b, range(1, 10000) as items
UNWIND items as item
CREATE (a)<-[:CONTAINS]-(:Post { id: item })-[:CONTAINS]->(b);
MATCH (a:Tag { value: "cypher" }), (p:Post)
CREATE (a)<-[:CONTAINS]-(p);

Query:

PROFILE MATCH (p:Post)-[:CONTAINS]->(e:Emoji)
RETURN p, e

Option 2

Schema: (:Emoji)<-[:CONTAINS_EMOJI]-(:Post)-[:CONTAINS_TAG]->(:Tag)

Creation:

MATCH (n) DETACH DELETE n; 
CREATE (:Tag { value: "neo4j" });
CREATE (:Tag { value: "cypher" });
CREATE (:Emoji { value: "smile" });
MATCH (a:Tag { value: "neo4j" })
MATCH (b:Emoji { value: "smile" })
WITH a, b, range(1, 10000) as items
UNWIND items as item
CREATE (a)<-[:CONTAINS_TAG]-(:Post { id: item })-[:CONTAINS_EMOJI]->(b);
MATCH (a:Tag { value: "cypher" }), (p:Post)
CREATE (a)<-[:CONTAINS_TAG]-(p);

Query:

PROFILE MATCH (p:Post)-[:CONTAINS_EMOJI]->(e:Emoji)
RETURN p, e
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment