2017-06-25 3 views
1

Ich habe 2 Sammlungen, Benutzer und Mitarbeiter, so dass _id des Mitarbeiters Dokument in Benutzerdokument eingebettet ist. Ich habe mich gefragt, welcher der beiden unten effizienter ist.In AQL, treten Joins zuerst oder die Filter?

FOR employee IN employees 
    FOR user IN users 
      FILTER user.email == '[email protected]' 
    FILTER employee._id == user.employee 
RETURN merge({user: user, active: employee.active}) 

ODER

FOR user IN users 
    FOR employee IN employees 
      FILTER employee._id == user.employee 
    FILTER user.email == '[email protected]' 
RETURN merge({user: user, active: employee.active}) 

Antwort

1

In Ihrem Fall spielt es keine Rolle. Die Abfrage wird automatisch vom Datenbankausführungsplaner optimiert und in eine Abfrage umgeschrieben, die der folgenden ähnelt.

FOR employee IN employees 
    FILTER user.email == '[email protected]' 
    FOR user IN users 
    FILTER employee._id == user.employee 
    RETURN merge({user: user, active: employee.active}) 

Sie können überprüfen, wie eine Abfrage über die WebUI in den query Registerkarte mit der Taste explain optimiert ist. Es wird Ihnen der Ausführungsplan ausgedruckt, in dem Sie auch sehen können, welche Indizes verwendet werden und wie viel jeder Teil Ihrer Abfrage kostet. Es ist ein sehr mächtiges Werkzeug.

Wenn Sie mehr über Abfrageausführung und Leistung wissen möchten, sollten Sie einen Blick in die docs werfen.