При создании запросов всегда старайтесь использовать имеющуюся информацию об отношениях в вашем запросе для повышения производительности. В этом случае вам не нужна сортировка (что является дорогостоящей операцией), потому что вы знаете , что нужная вам вершина имеет входящее ребро к вершине, вы можете просто использовать эту информацию в своем запросе.
Например, допустим, у меня есть следующая настройка:
CREATE CLASS T EXTENDS V
CREATE VERTEX T SET t = 1
CREATE VERTEX T SET t = 2
CREATE VERTEX T SET t = 3
CREATE VERTEX T SET t = 4
CREATE VERTEX T SET t = 5
CREATE CLASS link EXTENDS E
CREATE EDGE link FROM (SELECT * FROM T WHERE t = 1) TO (SELECT * FROM T WHERE t = 2)
CREATE EDGE link FROM (SELECT * FROM T WHERE t = 2) TO (SELECT * FROM T WHERE t = 3)
CREATE EDGE link FROM (SELECT * FROM T WHERE t = 3) TO (SELECT * FROM T WHERE t = 4)
CREATE EDGE link FROM (SELECT * FROM T WHERE t = 4) TO (SELECT * FROM T WHERE t = 5)
Тогда я могу выбрать вершину перед любым T
как таковым:
SELECT expand(in('link')) FROM T WHERE t = 2
Этот запрос выполняет следующие действия:
- Выберите вершину из
T
, где t=2
- Из этой вершины пройдитесь по входящему ребру (ам) типа
link
expand()
вершина, из которой исходит это ребро, чтобы получить всю информацию
Результат именно то, что вы хотите:
Это должно повысить производительность (особенно если вы добавите индекс для атрибута t
вершин), потому что вы используете всю информацию, которую вы заранее знаете об отношениях = нужный вам узел имеет край к узлу Вы выбираете.
Надеюсь, это поможет вам.