How can I optimize my Cypher Queries?

What should I do if my Cypher query is slower than expected, or uses more memory or CPU than I have?

I'm running my queries with Neo4j Browser, copied from my application.

What should I do? Are there any good practices / pointers?

There are a number of things you can do:

  1. Run your query with PROFILE or EXPLAIN. In the resulting query plan there are indications of expensive operations.
  2. Make sure that lookup operations by id or value (numeric range, text search) run on fields that are indexed.
  3. If you are running updates make sure that your updates handle batches of about 10k-100k records, if you have more, please batch them.

Share your queries and query plans (download and share the PNG) in this #neo4j-graph-platform:cypher category. Then others can help you.
It is also helpful to share your data-model and other statistics, and also the actual Cypher query.

There are already a number of performance related knowledge base posts available.

You can learn more here:

Cheers, Michael

I have at least 4,000 "cypher" sentences to write into neo4j, it takes too many time. how can i be quick?
Better way to merge/match loading from csv
How to use cypher import csv file and do merge commands using py2neo?
Import via http increasingly slow on a large dataset
Not able to restart neo4j Server which is in Cluster
Why its taking more time(4190ms) to get response while hitting from aws to server db,and taking only few milliseconds(615ms) from localhost to server db
How to use Node properties to set Relationship values instead of a constant HAS_A , IS_A thingy?
Really weird: query not returning expected data after upgrade from 3.5.16 community to 3.5.19 enterprise
Creating date nodes by looping through a start date and an end date
Null connection from django_neomodel
Trying to connect to my Mongodb Atlas cluster 0 luck with the URL connect string!
Formatting new date time instances
Import from CSV: Null Error on Non Null Value
What is wrong with my query: Variable not defined
Row's value with create
Unable to connect to localhost:7687
Neo4j Desktop Failing to Launch
Data has been input by cmd, but I can't visualize it
Novice trying to import access database on Mac Os
Bloom License Requirement
Generate a graph database from my own csv files, not from a relational database
Connect Neo4j as Database in eclipse
Help with Link Prediction and Graph Design to Solve - Different Categories of Persons, Identifiers, and Works
Programaticaly referencing Neo4j to aws s3 bucket
How to perform Machine learning graph CNN on my neo4j graph? I have constructed my graph using neo4j. I would like to see some demo or video links for performing the algorithm on the constructed graph. Can anyone through some valuable insights?
Connecting nodes to build flight path routines
Server Connect error
How to process heterogeneous data sources (structure, semi structure and unstructured) in Neo4Js using Ontology driven data integration? Any help /reference is highly appreciated
Failed to invoke procedure apoc.import.json caused by java.lang.nullpointerexception
SET Property
Browser Connection lost and never connects until restart and again dead in few seconds
Crear una aplicacion en php o java para ingresar dos datos a la base de datos neo4j
Importing Movie data from example data set on neoj4
Searching text from each record of MATCH output
Referencing graph in neo4j
How to implement Custom Data Encryption/Decryption Functions/Procedures in apoc for Client Confidential Information
Memory issues: Add new edge between nodes if there is a path of length k between them
Data cannot be queried after it was imported by neo4j-admin

Here's an interesting trick to optimize a query. It involves manually breaking up the query into two parts and forcing the part that winnows down the results be executed first returning a small result, and then executing a potentially slow query on the resulting small set.


Here's a useful item on Relationships or Relationship Properties;

Awesome, thats how traversing with index free adjacency.
Just a small thought, even with having property on relationship along with manual index on relationship property (by using **CALL db.index.fulltext.createRelationshipIndex)
could you co-relate the performance metrics