J'ai une requête Cypher suivante:héritage de l'entité Neo4j SDN4 et indices
PROFILE MATCH (childD:Decision)
WITH childD
ORDER BY childD.createDate
DESC SKIP 0 LIMIT 10
MATCH (childD:Decision)-[ru:CREATED_BY]->(u:User)
OPTIONAL MATCH (childD:Decision)-[rup:UPDATED_BY]->(up:User)
RETURN ru, u, rup, up, childD AS decision, [ (childD)-[rdt:BELONGS_TO]->(t:Tag) | t ] AS tags
En ce moment sur ma base de données Neo4j (~ nœuds 23k de décision) cette requête fonctionne ~ 50 ms et je ne comprends pas ou utilise index sur le champ childD.createDate
.
C'est PROFILE
sortie:
Ceci est mon 4 entités: NRS
@NodeEntity
public abstract class BaseEntity implements BaseEntityVisitable {
private static final String CREATED_BY = "CREATED_BY";
private static final String UPDATED_BY = "UPDATED_BY";
@GraphId
private Long graphId;
@Index(unique = false)
private Date createDate;
@Relationship(type = CREATED_BY, direction = Relationship.OUTGOING)
private User createUser;
@Index(unique = false)
private Date updateDate;
@Relationship(type = UPDATED_BY, direction = Relationship.OUTGOING)
private User updateUser;
....
}
@NodeEntity
public class Decision extends BaseEntity {
private static final String BELONGS_TO = "BELONGS_TO";
private static final String CONTAINS = "CONTAINS";
private static final String DEFINED_BY = "DEFINED_BY";
@Index(unique = true)
private Long id;
@Index(unique = false)
private String name;
....
}
C'est :schema
sortie:
Indexes
ON :BaseEntity(createDate) ONLINE
ON :BaseEntity(updateDate) ONLINE
ON :Decision(lowerName) ONLINE
ON :Decision(name) ONLINE
ON :Decision(totalChildDecisions) ONLINE
ON :Decision(totalViews) ONLINE
ON :Decision(id) ONLINE (for uniqueness constraint)
S'il vous plaît noter que createDate
l'indice est situé sur :BaseEntity
et non sur :Decision
chaud pour vérifier que cela fonctionne d'index (ou non) pour cette partie de la requête: ORDER BY childD.createDate
Merci pour votre réponse. Une question de plus sur l'héritage SDN 4 et les index Neo4j - par exemple la requête suivante 'MATCH (childD: Décision {name: 'Andres}} RETURN childD' Utilise-t-elle l'index pour' name 'déclaré au SDN 4' BaseEntity' et non à 'Decision' (où' Decision étend BaseEntity') directement? – alexanoid
Si votre schéma a cet index spécifique pour cette étiquette spécifique (comme il semble d'après ce que vous avez posté), le MATCH utilisera l'index. Je ne suis pas informé sur SDN4 (donc je ne sais pas exactement comment vous avez créé le schéma) ... mais ce qui est dans le schéma remplace tout ce qui est dans votre code. –
pour être 100% clair - si mon noeud 'Decision' a deux étiquettes -': BaseEntity' et ': Decision', donc dans ce cas si j'ai l'index': BaseEntity (createDate) 'et j'utilise' MATCH (d: Decision) WHERE d.createDate = {createDate} 'donc cet index sera utilisé? – alexanoid