Какой самый быстрый способ найти ребро между двумя заданными вершинами в orientDB
У меня есть 2 коллекции вершин community
а также user
, Каждый пользователь, который является членом сообщества, связан с этим сообществом, используя преимущество community_user
,
Я пытаюсь обновить community_user
край для данного пользователя их _id и данный community
его _id.
SELECT read from community_user where
outV() in (select @rid FROM `community` WHERE ( `_id` = '5ab283c35b6b9435d4c9a958' ))
and
inV() in (select @rid from user where _id = 'x5mxEBwhMfiLSQHaK')
Этот запрос работает, хотя он довольно медленный community_user
край наполняется.
Есть ли способ проиндексировать этот поиск или более быстрое решение, чтобы найти нужное мне значение?
Мои текущие соответствующие индексы включены community._id
а также user._id
EXPLAIN
этого запроса приводит к:
{
"result": [
{
"@type": "d",
"@version": 0,
"documentReads": 1,
"fullySortedByIndex": false,
"documentAnalyzedCompatibleClass": 1,
"recordReads": 1,
"fetchingFromTargetElapsed": 0,
"indexIsUsedInOrderBy": false,
"currentMatch": null,
"compositeIndexUsed": 1,
"current": "#169:839",
"depth": 0,
"involvedIndexes": [
"user._id"
],
"limit": -1,
"matched": {
"$ORIENT_DEFAULT_ALIAS_0": "#1770:0",
"theEdge": "#1817:1889"
},
"evaluated": 1,
"elapsed": 1490.7661,
"resultType": "collection",
"resultSize": 1,
"@fieldTypes": "documentReads=l,documentAnalyzedCompatibleClass=l,recordReads=l,fetchingFromTargetElapsed=l,compositeIndexUsed=l,current=x,involvedIndexes=e,evaluated=l,elapsed=f"
}
],
"notification": "Query executed in 1.521 sec. Returned 1 record(s)"
}
1 ответ
Самый простой способ - использовать оператор MATCH
MATCH
{class:community, where:(_id = '5ab283c35b6b9435d4c9a958' )}
.outE(){as:theEdge}.inV(){class:user, where:(_id = 'x5mxEBwhMfiLSQHaK')}
RETURN $elements