为什么 or() 查询在 Datastax DSE 5.0.x 图表中不使用索引?
Why or() queries are not using index in Datastax DSE 5.0.x Graph?
我已经在 User 和 uuid 上创建了索引
如果我这样做:
schema.vertexLabel("User").describe()
我得到:
schema.vertexLabel("User").index("byUuid").materialized().by("uuid").add()
当我运行:
g.V().hasLabel("User").has("uuid","oneUuid")
索引提取正确..
但是当我执行以下操作时:
g.V().or(__.hasLabel("User").has("uuid","oneUuid"), __.hasLabel("User").has("uuid","anotherUUID"))
我得到:
org.apache.tinkerpop.gremlin.driver.exception.ResponseException: Could
not find an index to answer query clause and graph.allow_scan is
disabled:
谢谢!
or()
不容易优化,因为您可以做更复杂的事情,例如:
g.V().or(
hasLabel("User").has("uuid","oneUuid"),
hasLabel("User").has("name","bob"))
...索引查找无法回答一个或多个条件。这是可行的,并且可能会在未来的版本中完成,但目前可用的图形数据库的 afaik none 正在尝试优化 OrStep
.
无论如何,您的示例查询可以很容易地重写,以便它实际使用索引:
g.V().hasLabel("User").has("uuid", within("oneUuid", "anotherUUID"))
我已经在 User 和 uuid 上创建了索引
如果我这样做:
schema.vertexLabel("User").describe()
我得到:
schema.vertexLabel("User").index("byUuid").materialized().by("uuid").add()
当我运行:
g.V().hasLabel("User").has("uuid","oneUuid")
索引提取正确..
但是当我执行以下操作时:
g.V().or(__.hasLabel("User").has("uuid","oneUuid"), __.hasLabel("User").has("uuid","anotherUUID"))
我得到:
org.apache.tinkerpop.gremlin.driver.exception.ResponseException: Could not find an index to answer query clause and graph.allow_scan is disabled:
谢谢!
or()
不容易优化,因为您可以做更复杂的事情,例如:
g.V().or(
hasLabel("User").has("uuid","oneUuid"),
hasLabel("User").has("name","bob"))
...索引查找无法回答一个或多个条件。这是可行的,并且可能会在未来的版本中完成,但目前可用的图形数据库的 afaik none 正在尝试优化 OrStep
.
无论如何,您的示例查询可以很容易地重写,以便它实际使用索引:
g.V().hasLabel("User").has("uuid", within("oneUuid", "anotherUUID"))