2016-09-27 2 views
-1

Я запрашивая ArangoDb около 500к документа через arangojs.query() с этой очень простой запросПочему этот простой ArangoDB запрос иногда занимает очень много времени

"FOR c IN Entity FILTER c.id == 261764 RETURN c" 

Это узел узла связи графа.

Но иногда это заняло более 10 секунд, и в журнале arangodb также есть предупреждение о том, что запрос занимает слишком много времени. Много времени это происходит, если новый сеанс используется в браузере. Является ли проблема arangodb или arangojs или сам мой запрос не оптимизирован?

------------------- Редактировать ----------------------

Добавлено db.explain

Query string: 
FOR c IN Entity FILTER c.id == 211764 RETURN c 

Execution plan: 
Id NodeType     Est. Comment 
    1 SingletonNode     1 * ROOT 
    2 EnumerateCollectionNode 140270  - FOR c IN Entity /* full collection scan */ 
    3 CalculationNode   140270  - LET #1 = (c.`id` == 211764) /* simple expression */ /* collections used: c : Entity */ 
    4 FilterNode    140270  - FILTER #1 
    5 ReturnNode    140270  - RETURN c 

Индексы используются: применяются правила

none 

оптимизации:

none 
+0

вы можете добавить вывод 'db._explain()'? – dothebart

+1

Если вы ищете 'c.id', у вас есть указатель на него? Обычно ArangoDB использует поле id id, которое получает автоматически созданный для него индекс. –

+0

@dothebart: Я добавил объяснение. Но если он используется внутри самой базы данных, это очень быстро, и я никогда не видел, чтобы это заняло более 0,5 с –

ответ

2

Как ваш Объяснить ш ows, ваш запрос не использует индексы, но выполняет полную проверку коллекции.

В зависимости от того, когда он находит совпадение (в начале или в конце коллекции), время выполнения может отличаться.

См the Indexing chapter для создания индексов, а AQL Execution and Performance глава МЕТОДИЧЕСКИЕ анализировать вывод db._explain()