Ignite是否支持为多值字段创建索引以提升查询性能?
Apache Ignite 集合类型字段索引相关说明
首先明确答案:Apache Ignite 完全支持为 List、Set、数组这类多值字段创建索引,能够大幅加速按集合内元素查询的请求效率,这种索引叫做多值索引(Multi-Value Index),实现逻辑和你提到的 MongoDB 数组索引类似。
索引创建方法
你可以通过两种方式创建多值索引:
注解方式(Java 对象存储场景)
在对应集合字段的@QueryIndex注解中开启multiValue = true配置即可,示例如下:// 缓存值对应的实体类 public class Book { // 为authors集合字段配置多值索引 @QueryIndex(multiValue = true) private List<String> authors; // 其他字段、getter、setter省略 }SQL DDL 方式
直接执行带MULTIVALUE关键字的建索引语句即可:CREATE MULTIVALUE INDEX idx_book_authors ON Book(authors);
查询方法
你提到的“不知道怎么用SQL写这类查询”的问题也有对应的语法,使用 CONTAINS 函数即可匹配集合内的元素,示例查询语句:
-- 查询所有作者包含John的书籍 SELECT * FROM Book WHERE CONTAINS(authors, 'John');
上述查询会自动匹配我们创建的多值索引,避免全表扫描,性能远高于无索引场景。如果你的业务主要使用键值API,也可以通过 SqlFieldsQuery 执行上述查询拿到符合条件的记录主键,再通过主键拉取完整的缓存值即可。
注意事项
- 多值索引仅支持元素为标量类型(字符串、数字、日期等可排序类型)的集合/数组
- 不建议给单条记录元素数量过多(比如单条记录集合元素超过100个)的字段建多值索引,会导致索引存储量大幅膨胀。
内容的提问来源于stack exchange,提问作者Roman Puchkovskiy
相关产品推荐
相关产品推荐

