2017-06-08 3 views
1

Ich habe ein Problem mit einer Abfrage in OrientDB.Abfrage Leistungsprobleme bei der Verwendung von MATCH und SELECT zusammen OrientDB

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

Wie Sie sehen, möchte ich die letzten 50 neuesten Artikel mit dem entsprechenden Autor abrufen. Das Problem, mit dem ich konfrontiert bin, ist, dass die Unterabfrage zuerst alle meine Artikel durchläuft und sie dann an den Elternteil weiterleitet und dann gefiltert wird. Dies ist offensichtlich nicht sehr effektiv, weil alle Artikel in den Speicher geladen werden, wenn ich nur 50 davon brauche.

Kennt jemand einen besseren Ansatz, ohne mehrere Abfragen verwenden zu müssen.

Antwort

2

könnten Sie mit

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

Mit diesem einem versuchen ich eine sligthly besseren Leistungen bin immer, aber extrem nichts.

EDIT folgende Luigi Kommentar

Erstellen Sie einen Index auf createdAt Eigenschaft:

CREATE INDEX article.createdAt ON article (createdAt) NOTUNIQUE 

PS

Ich bin nicht sicher, dass die order by in Ihrer Abfrage funktioniert gut

+1

Um eine gute Leistung in dieser Abfrage zu haben, müssen Sie einen Index auf 'createdAt' Eigenschaft –

+0

@ LuigiDell'Aquila yeah! Mit einem 'NOTUNIQUE' SBTREE-Index habe ich eine große Verbesserung in der Leistung. - ca. 200ms vs 20ms –

+0

Danke, das gab mir ein paar neue Erkenntnisse. – Ruben

Verwandte Themen