0

これはサイファーです:

START n=node:ACCOUNTS(ACCOUNT_ID={id}) 
MATCH (n)-[:PROVIDER]->(p)<-[r:ALERT]-() 
RETURN r 
ORDER BY {o} ASC 
SKIP {s} LIMIT {l}

実行計画は次のとおりです。

ColumnFilter(symKeys=["  UNNAMEDS239765216", "n", "m", "  UNNAMED3", "p", "r"], returnItemNames=["r"], _rows=50, _db_hits=0)
    Slice(skip="{s}", _rows=50, _db_hits=0)
      Top(orderBy=["SortItem(Cached(  UNNAMEDS239765216 of type Any),true)"], limit="Add", _rows=50, _db_hits=0)
        Extract(symKeys=["n", "m", "  UNNAMED3", "p", "r"], exprKeys=["  UNNAMEDS239765216"], _rows=42563, _db_hits=0)
          TraversalMatcher(trail="(n)-[  UNNAMED3:PROVIDER WHERE true AND true]->(p)<-[r:ALERT WHERE true AND true]-(m)", _rows=42563, _db_hits=614381)
            ParameterPipe(_rows=1, _db_hits=0)

アカウントにはプロバイダー (1 対多) があり、プロバイダーには着信アラート関係があります。私はそれらの関係を選択することにのみ興味があります。

最初の実行には次の時間がかかります。

2013-07-18 17:40:54,199 [main] INFO  net.ahm.graph.dao.AlertDAO  - >>>> GET ALERTS FOR ACCOUNT CYPHER TOOK: 4789 m-secs

同じクエリの 10 回目の実行には次の時間がかかります (エンジンはキャッシュされ、クエリはパラメーター化されます)。

2013-07-18 17:41:15,431 [main] INFO  net.ahm.graph.dao.AlertDAO  - >>>> GET ALERTS FOR ACCOUNT CYPHER TOOK: 1586 m-secs

ORDER BY を削除すると、次の実行計画と時間になります。

2013-07-20 23:45:09,317 [main] DEBUG net.ahm.graph.dao.AlertDAO  - ColumnFilter(symKeys=["n", "m", "  UNNAMED3", "p", "r"], returnItemNames=["r"], _rows=50, _db_hits=0)
Slice(skip="{s}", limit="{l}", _rows=50, _db_hits=0)
  TraversalMatcher(trail="(n)-[  UNNAMED3:PROVIDER WHERE true AND true]->(p)<-[r:ALERT WHERE true AND true]-(m)", _rows=50, _db_hits=241)
    ParameterPipe(_rows=1, _db_hits=0)
2013-07-20 23:45:09,317 [main] INFO  net.ahm.graph.dao.AlertDAO  - >>>> GET ALERTS FOR ACCOUNT CYPHER TOOK: 9 m-secs
4

0 に答える 0