私は、次のNeo4jサイファークエリのNeo4jサイファークエリのパフォーマンスの最適化
MATCH (dg:DecisionGroup)-[:CONTAINS]->(childD:Decision)
WHERE dg.id = 1
MATCH (childD)-[relationshipValueRel4:HAS_VALUE_ON]-(filterCharacteristic4:Characteristic)
WHERE filterCharacteristic4.id = 4
WITH relationshipValueRel4, childD, dg
WHERE (ANY (id IN [2,3]
WHERE id IN relationshipValueRel4.optionIds))
WITH childD, dg
OPTIONAL MATCH (childD)-[vg:HAS_VOTE_ON]->(c:Criterion)
WHERE c.id IN [2, 3]
WITH childD, dg, vg.avgVotesWeight as weight, vg.totalVotes as totalVotes
WITH childD , dg , toFloat(sum(weight)) as weight, toInt(sum(totalVotes)) as totalVotes
ORDER BY weight DESC
SKIP 0 LIMIT 10
WITH * MATCH (childD)-[ru:CREATED_BY]->(u:User) OPTIONAL MATCH (childD)-[rup:UPDATED_BY]->(up:User)
RETURN ru, u, rup, up, childD AS decision, weight, totalVotes,
[ (dg)<-[:DEFINED_BY]-(entity)<-[:COMMENTED_ON]-(comg:CommentGroup)-[:COMMENTED_FOR]->(childD) | {entityId: toInt(entity.id), types: labels(entity), totalComments: toInt(comg.totalComments)} ] AS commentGroups,
[ (dg)<-[:DEFINED_BY]-(c1)<-[vg1:HAS_VOTE_ON]-(childD) | {criterionId: toInt(c1.id), weight: vg1.avgVotesWeight, totalVotes: toInt(vg1.totalVotes)} ] AS weightedCriteria, [ (dg)<-[:DEFINED_BY]-(ch1:Characteristic)<-[v1:HAS_VALUE_ON]-(childD) WHERE NOT ((ch1)<-[:DEPENDS_ON]-()) | {characteristicId: toInt(ch1.id), optionIds: v1.optionIds, valueIds: v1.valueIds, value: v1.value, available: v1.available, totalHistoryValues: v1.totalHistoryValues, totalFlags: v1.totalFlags, description: v1.description, valueType: ch1.valueType, visualMode: ch1.visualMode} ] AS valuedCharacteristics
を持っている私は、このクエリの実行のパフォーマンスでsutisfiedていませんよ。
これはPROFILE出力されます。
Cypher version: CYPHER 3.3, planner: COST, runtime: INTERPRETED. 3296130 total db hits in 2936 ms
は、このクエリのパフォーマンスを最適化するチャンスはありますか?
感謝。私はクエリパラメータを使用します。また、私はこの問題がHAS_VALUE_ON関係にあると思います。 1つのアイデアは、手動インデックスhttps://neo4j-contrib.github.io/neo4j-apoc-procedures/#_using_manual_index_on_relationship_propertiesを使用しようとしています。あなたはどう思いますか?ここで助けてくれますか? – alexanoid
詳細については、 'HAS_VALUE_ON_WITH_OPTID_1'、' HAS_VALUE_ON_WITH_OPTID_2'で提案された解決策を教えてください。 – alexanoid
'(:Decision) - (:HAS_VALUE_ON) - (:Characteristic)'というプロパティを 'id'プロパティで作成する代わりに、このプロパティを次のような型に直接入れることができます:'(:Decision) - [:HAS_VALUE_ON_WITH_ID_X] - (:Characteristic) 'Xはあなたのプロパティの値です。これで、クエリは1.5Mのrelsを拡張せず、フィルタを作成しますが、ちょうど75Kです。グラフ自体のインデックスにすることができます^^ – logisima