The query I've written returns accurate results based on some random testing I've done. However, the query execution takes really long (7699.43 s) 
I need help optimising this query. 

count(Person) -> 67895

count(has\_POA) -> 355479

count(POADocument) -> 40

count(issued\_by) -> 40

count(Company) -> 21

count(PostCode) -> 9845

count(Town) -> 1673

count(in\_town) -> 9845

count(offers\_services\_in) -> 17107

All the entity nodes are indexed on Id's (not Neo4j IDs). The PostCode nodes are also indexed on PostCode. 

[![enter image description here](https://i.stack.imgur.com/lHpnX.png)](https://i.stack.imgur.com/lHpnX.png)
[![enter image description here](https://i.stack.imgur.com/ookMI.png)](https://i.stack.imgur.com/ookMI.png)

```
MATCH pa= (p:Person)-[r:has_POA]->(d:POADocument)-[:issued_by]->(c:Company),
(pc:PostCode),(t:Town) WHERE r.recipient_postcode=pc.PostCode AND (pc)-
[:in_town]->(t) AND NOT (c)-[:offers_services_in]->(t) RETURN p as Person,r 
as hasPOA,t as Town, d as POA,c as Company

```

Much thanks in advance!
-Nancy