Влияет ли порядок оператора FILTER на производительность запроса в arangoDB? - PullRequest
0 голосов
/ 02 ноября 2018

Например, у меня есть эта структура данных

{
easyFilter:1111,
hardFilter:[
 {id:1},
 {id:2},
...
]
}

Если запрос, который я использую, похож на

For u in collection
Filter u.easyFilter=1111 AND "somevalue" IN FLATTEN(u.hardFilter[*].id)
return u

Будет ли запрос выполняться быстрее, если я сначала поставлю easyFilter, так как это просто сравнение строк на первом уровне объекта или это не имеет значения в arango?

1 Ответ

0 голосов
/ 02 ноября 2018

Да, порядок операторов FILTER влияет на производительность запроса.

Особенно в вашем случае, где

easyFilter это просто сравнение строк,

, в то время как hardFilter состоит из нескольких операций

  1. итерационный массив + получение значений определенного ключа
  2. выравнивание этого массива
  3. проверка, содержит ли массив определенное значение

Что пропущено, так это важность индексов. Они являются теми, кто стоит за действительно совершенными запросами. Проверьте Обработка индексов в Документация ArangoDB , особенно Какой индекс использовать, когда .

Для повышения производительности вашего примера было бы определенно полезно добавить Hash или Skiplist index easyFilter (зависит от типа / уникальности ваших данных). Оба индекса поддерживают также массивы, но на основе документации, которая применяется только к простым массивам, содержащим значения, а не объекты.

...