1

サイファーを使用して、ユーザー「mike」によって高く評価されなかった10件の投稿を見つけようとしています。NOT関係を持つwhere句を配置することは、オプションの関係と照合してから、その関係がwhere句でnullであるかどうかを確認するよりも効率的ですか?具体的には、全表スキャンと同等の処理が行われないことを確認し、これがスケーラブルなクエリであることを確認したいと思います。

これが私が使っているものです

START user=node:node_auto_index(uname:"mike"), 
  posts=node:node_auto_index("postId:*") 
  WHERE not (user-[:LIKES]->posts) 
  RETURN posts SKIP 20 LIMIT 10;

または、MATCHオプションの関係でフィルタリングすることはできますか

START user=node:node_auto_index(uname="mike"),
  posts=node:node_auto_index("postId:*")
  MATCH user-[r?:LIKES]->posts  
  WHERE r IS NULL
  RETURN posts SKIP 100 LIMIT 10;

コンソールでのいくつかの簡単なテストは、2番目のアプローチでより速いパフォーマンスを示しているようです。2番目のクエリの方が速いと思いますか?そして、もしそうなら、なぜですか?

4

1 に答える 1

2

最初のクエリでは、エンジンはすべてのpostIDノードを実行しnot (user-[:LIKES]->posts)、各投稿IDの状態を手動でチェックしますが、2番目の例(少なくともv1.9.02を使用していると仮定)では、エンジンは投稿ノードのみを取得しますが、実際にはそうではありません。 tユーザーに接続しました。これは、エンジンがすべてのpostIDノードを通過しない最適化です。

可能であれば、クエリでは常にWHEREではなくMATCH句を使用し、宣言でアステリックスを省略してみてくださいSTART n=node:index('name:*')

于 2013-01-14T15:45:50.323 に答える