2017-06-08 14 views
1

OrientDBのクエリに問題があります。MATCHとSELECTを一緒に使用するとパフォーマンスの問題が発生するOrientDB

SELECT FROM (
    MATCH 
     {class: article, as: article}.in('authorOf'){as: author} 
    RETURN article, author 
) ORDER BY createdAt desc SKIP 0 LIMIT 50 

ご覧のとおり、最後の50個の記事を対応する著者と一緒に取得したいと思います。私が直面している問題は、サブクエリがすべての記事を最初に反復し、それを親に渡してからフィルタリングされるということです。明らかにそれほど効果的ではありません。なぜなら、それらの記事が50個だけ必要なときにすべての記事がメモリに読み込まれるからです。

複数のクエリを使用することなく誰かがより良いアプローチを知っていますか?

答えて

2

あなたはこの私がsligthlyより良いパフォーマンスを得ている1、極端な何もない

select @rid as article,in('authorOf')[0] as author from article order by createdAt desc SKIP 0 LIMIT 50 

と試みることができます。ルイージさんのコメント

createdAtプロパティにインデックスを作成し、以下の

EDIT:

CREATE INDEX article.createdAt ON article (createdAt) NOTUNIQUE 

PS

私はあなたのクエリでorder byがうまく機能していることはよく分かりません

+1

このクエリで良好なパフォーマンスを得るには、 'createdAt'プロパティのインデックスを定義する必要があります –

+0

@ LuigiDell'Aquilaええ! 'NOTUNIQUE' SBTREEインデックスで私はパフォーマンスが大幅に向上しました。 - 約200ms対20ms –

+0

ありがとう、これは私にいくつかの新しい洞察力を与えた。 – Ruben

関連する問題