Star

索引查询慢

schema:
CREATE EDGE GID_UID(create_time timestamp,update_time timestamp);
CREATE EDGE INDEX index_0 on GID_UID(update_time);

edge导入的数据量有100GB+
查询
LOOKUP ON GID_UID WHERE GID_UID.update_time > 1592582400 | limit 10;

v

问题一、请问查询索引耗时这么长的原因可能是?

另外,看官方关于索引的设计介绍https://nebula-graph.com.cn/posts/how-indexing-works-in-nebula-graph/

需求是查vertexA 的所有update_time 在一个时间范围内的所有边
之前用go 查实际并不走索引
go from hash(‘000000000a264302’) over GID_DID where GID_DID.update_time >=1592582400 yield GID_DID.create_time,GID_DID.update_time;

问题二、有个想法是用lookup查,不知道是否支持,试了一下报语法错误
LOOKUP ON GID_UID WHERE GID_UID.update_time > 1592582400 and GID_UID.SrcVID = vid

问题1,查询慢的原因可能是GID_UID.update_time > 1592582400这个条件过滤出来的结果集太大,存储层会将过滤出来的结果集全部返回给executor层,然后executor层处理limit 10.
问题2,lookup不支持对vid的条件过滤。如果已知的vid,建议还是用go 语句或fetch prop语句。

问题一、"GID_UID.update_time > 1592582400"这类的条件确实会产生很大的结果集,所以limit 不会下推到storage层,lookup 适合条件过滤后结果集较小的查询

问题二、所以LOOKUP 的条件过滤只支持建索引的列

是的

浙ICP备20010487号