2

バックグラウンドでneo4jがこのリクエストをどのように解釈するのか疑問に思っています:

start n=node(500) match n-[:relation_type]-() return count(*)

Neo4j はすべての relationship_type を反復処理してカウントを取得しますか?それとも、「型付きリレーションの内部リンク リスト」ごとにすべての要素のカウンターを維持しますか?

リレーションを追加するたびにプロパティにリレーションの数を保存する必要があるのか​​ 、それとも、neo4jがすべてのリレーションを反復して現在の数を取得することなくすばやく取得できるのか疑問に思っています。

(mysqlのように:「select count(*)」はすべての行をスローしません。テーブルの行数を知っていますか、neo4jは特定のノードの型付けされた関係の数を知っていますか?)

助けてくれてありがとう!

4

1 に答える 1

2

暗号プロファイラーを使用して、暗号クエリで何が起こっているかを確認できるので、もう不思議ではありません:)

neo4j-shell で cypher を使用し、その前に「profile」キーワードを付けることができます (ただし、neo4j 1.9 および 2.0 のみ)。

webadmin インターフェースで提供されている neo4j-shell で試すことができます。

profile start n=node(500) match n-[:relation_type]-() return count(*);

同様のことを試してみたところ、次の出力が得られました。

==> ColumnFilter(symKeys=["  INTERNAL_AGGREGATEb12550d5-63c6-41c4-a4b5-86bba011c998"], returnItemNames=["count(*)"], _rows=1, _db_hits=0)
==> EagerAggregation(keys=[], aggregates=["(  INTERNAL_AGGREGATEb12550d5-63c6-41c4-a4b5-86bba011c998,CountStar)"], _rows=1, _db_hits=0)
==>   TraversalMatcher(trail="(n)-[  UNNAMED6:LIKE WHERE true AND true]->(  UNNAMED5)", _rows=25, _db_hits=26)
==>     ParameterPipe(_rows=1, _db_hits=0)

これは、トラバースしているときにカウントされると思います(_db_hits = 0で始まります)!

于 2013-06-04T13:57:35.680 に答える