复合索引简化成单个索引支持多条件组合查询

你的需求我理解了。你的需求其实类似于关系数据库的索引逻辑。如果有索引,则通过规则寻找最优的索引,如果最优的索引不存在,则挑选一个次优的,如果实在没有有效的索引可用,则通过data scan进行查询。按照此逻辑,如果某个tag (c1, c2, c3…) 中对所有字段(c1, c2, c3)均创建一个索引,就能应付任何过滤条件的查询。即使没有创建index,也可以通过data scan进行查询。

这个功能目前还没有在开发计划上,主要原因有两点:1,这种查询在storage层很可能会导致 full index scan 或 full data scan,目前nebula还没有分页查询的功能,很难控制查询的时效性。2,nebula索引的根本目的,不是为了提高查询性能(和关系数据库有些区别,关系数据库的index是为了提高查询性能,即使没有index也能正常查询),而是为了解决通过prop过滤找到点或边的功能。

其实支持复合索引的功能,从编码的角度上来说并不难,只要在索引优化规则那里放宽索引选择的策略就可以了。

1 个赞