Chapter 5. Query Analysis and Tuning
Any graph application in production relies on performant queries and an effective use of resources. This is even more important in mission-critical applications, where the difference between an efficient query and a slow one can sometimes bring dire consequences, such as financial loss, security compromise, or even loss of life. Instead of only providing ready solutions, this chapter focuses on why queries perform efficiently (or not). Its goal is to give you enough depth of understanding to be able to reason about your own queries when you need to tune them.
As Neo4j consultants, we’ve encountered a myriad of Cypher queries in all sorts of domains, and the good news is that the majority of those queries can be tweaked to perform better if you have a strong grasp of the fundamentals. In this chapter, you will learn how the query planner operates and how to read and understand the execution plan it produces. We’ll explore concepts such as anchor selectivity and row cardinality, which are core to writing good queries, as well as the use of indexes for performance.
Query Execution
A Cypher query starts off as a string that describes the pattern(s) you want to match in the graph, the conditions to apply, and any transformations to be applied to the results. Figure 5-1 shows the steps involved at a high level, which take your Cypher query string through its execution to produce results.
Figure 5-1. Cypher’s query processing pipeline
The query ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access