Vue d’ensemble
Lorsqu'une clause enchaînée appelle un alias ou plusieurs alias homologues, le nombre de fois que cette clause s'exécute équivaut au nombre d'entrées contenues dans les données représentées par l'alias. Chaque exécution traite une entrée de données, tandis que des optimisations système peuvent s'appliquer en fonction de la situation réelle. Pour les clauses de requête, chaque exécution de la requête est également appelée une sous-requête.
Cependant, lorsqu'une clause enchaînée appelle des alias hétérologues, le nombre de fois que cette clause s'exécute dépend de l'alias avec le moins d'entrées de données.
Général
Exemple : n
a 4 lignes, la clause de suppression est exécutée 4 fois, supprimant chaque fois 1 nœud.
Exemple : Ces deux UQLs donnent les mêmes résultats mais diffèrent dans leurs exécutions :
- Dans la partie (a) où la clause
find().nodes()
prendcolors
dans son filtre, qui contient deux entrées de données, la clause s'exécute 2 fois. - Dans la partie (b) où
find().nodes()
ne prend aucun alias dans son filtre, elle s'exécute une seule fois.
Clause CALL
La clause CALL
peut être utilisée pour effectuer un traitement pour chaque ligne des données de manière indépendante.
Exemple : Chaque entrée de données de users
est traitée individuellement par la clause CALL
. Si users
a N entrées, la clause CALL
s'exécutera N fois ; lors de chaque exécution de la clause CALL
, la clause de requête de chemin et la clause SKIP
s'exécutent chacune une fois.
find().nodes({@user}) as users
call {
with users
n(users).e()[:2].n() as paths
skip 2
return paths
}
return paths
Clause BATCH
La clause BATCH
partitionne les données en lots plus petits pour un traitement séquentiel par la clause suivante, réduisant ainsi l'utilisation de la mémoire.
Exemple : Les (maximum) 5000 nœuds dans users
sont répartis en 50 lots, chacun contenant 100 nœuds. Les nœuds de chaque lot sont automatiquement collectés dans un tableau et passés dans la requête de modèle de chemin, qui est ainsi exécutée 50 fois.
find().nodes({@user.age_level == 4}) limit 5000 as users
BATCH 100
n(users).e().n({@ad} as ads)
GROUP BY ads.cate
RETURN table(ads.cate, count(ads.cate))
LIMIT et limit()
La clause LIMIT
restreint le nombre d'entrées de données contenues dans un alias. Dans les clauses enchaînées, la méthode limit()
est utilisée pour limiter le nombre d'entrées de données retournées à chaque exécution de la clause.
Exemple : Dans les deux déclarations, la clause find().nodes()
s'exécute deux fois, mais les résultats varient.
- Dans la partie (a), la méthode
limit(2)
garantit que chaque exécution de la requête retourne au maximum deux nœuds. - Dans la partie (b), la clause
LIMIT
limite le nombre total de nœuds dansresult
à un maximum de deux.
Préfixe OPTIONAL
Le préfixe OPTIONAL
garantit que chaque exécution de la clause produit un résultat. Si la requête ne trouve rien, elle retourne null.
Exemple : Les deux déclarations impliquent deux exécutions de la clause find().nodes()
, avec des résultats différents.
- Dans la partie (a), la deuxième exécution de la requête pour la couleur noire ne donne aucun retour.
- Dans la partie (b), la deuxième exécution de la requête pour la couleur noire retourne null.