我已经创建了一个简单的neo4j图,并正在测试沿属性进行索引的影响,我很难理解为什么该索引(看起来已经使用并运行)没有提高只读查询性能。
图表和索引创建详细信息:
有两种类型的节点标签(src_node和tag),每个节点都有一个单独的文本属性,分别是src_prop和tag_str。
我在“tag”节点上的tag_str属性上创建了一个简单的索引。
"CREATE TEXT INDEX `tag_idx` FOR (n:`tag`) ON (n.`tag_str`)
我创建了1000个标签节点,每个节点都有一个随机生成的8个字符长的tag_str值。
例如
CREATE (:tag {tag_str:"A1B2C3D4"})
我创建100000个源节点,每个节点都有一个长度为32的随机字符串str_prop,
每个标签都链接到一个标签,边缘标记为“包含”
MATCH (tgt:tag WHERE tgt.tag_str= "A1B2C3D4") CREATE (:src_node{src_prop:<32_char_string>})-[:contains]->(tgt)
这一切都很好,我可以确认链接已经创建。
查找查询
例如,我运行一个简单的查询来查找链接到特定标记的节点
MATCH (tgt:tag WHERE tgt.tag_str = "asEQqNLF") - [] - (retnode) return retnode
我可以查看索引统计信息,并验证在运行此查询时是否正在读取它。
当我比较索引运行与非索引运行时,查找查询(而不是src_node创建查询)的索引性能要么相同,要么稍差。我很难理解为什么,所以我很感激大家能有任何见解。
例如,我是否创建了不正确类型的索引?我是否在查询的另一部分(如边缘遍历)遇到了瓶颈?有没有我错过的配置?
澄清更新
定时测试运行次数超过10万次,包括每次事务时间以及有索引和无索引的端到端定时。我也缩放了图表的大小,看到了类似的结果,但将根据下面的反馈继续调查。
修正了这里帖子中存在的一个小拼写错误,但
不
在我参考的实际测试中。