首批通过分布式安全可靠测评,为关键业务系统打造
搜索索引(Search Index)
更新时间:2026-07-29 10:39:51
本文介绍 OceanBase 数据库 MySQL 模式下的搜索索引(Search Index):其以倒排方式组织列内路径与取值,面向 JSON、单级数组 以及多种标量类型等列提供索引加速,常用于 索引混合搜索 中的半结构化过滤,以及分析型宽表上多列索引与多索引联合查询(Index Merge)等场景。
概念说明
搜索索引采用倒排思路,将被索引列中的取值(及 JSON 内路径—取值)组织为可快速过滤的索引项;同一索引可覆盖多列,JSON 列还可通过 WITH 精细控制路径与类型,适合半结构化过滤、宽表多列过滤,并可与 B-tree、全文、向量等索引配合,由优化器做多索引联合查询(Index Merge),识别可用索引组合,提升性能。
与为每个访问路径单独建函数索引或偏数组元素展开的多值索引相比,搜索索引强调一次建索引、覆盖多路径,降低索引数量与维护成本,并便于应对半结构化数据中路径多变、查询模式多样的情况。
应用场景
混合搜索(Hybrid Search)
当业务表同时存在向量、全文、标量以及 JSON / 单级数组等列上的路径过滤条件时,常需在一次请求中组合多种谓词。搜索索引为这类半结构化条件提供统一的倒排支撑,减少“每路径一索引”的组合爆炸,便于与索引混合搜索能力配合使用;该文档“性能优化”小节含与向量索引同表声明搜索索引的精简示例。
多列索引和多索引联合查询(Index Merge)
分析型负载里常见宽表:列多、过滤维度多,往往会对多个列分别建索引。在部分分析型数据库中,还存在接近全列索引的做法,即为表中各列普遍维护索引,使任意列上的条件都尽量可走索引访问。搜索索引支持在多个列上创建,从能力上可对齐这类“多列乃至全列建索引”的建模习惯。
在此基础上,当同一张表上存在多个可用索引时,还可结合多索引联合查询:由优化器自动识别可参与的索引组合,选取较优的联合扫描方式,在多列谓词并存时减少全表扫描,贴近分析型产品中的组合查询体验。从分析型库迁移或双跑时,除半结构化路径过滤外,也可将上述“多列索引 + 组合扫描”作为工作负载承接的参考。
实现要点(概念层)
- GIN(Generalized Inverted Index):以倒排方式组织路径与取值的索引项,支撑多类操作符与多路径共存。
- 全路径索引:对列内可索引路径统一维护倒排,查询时按路径下推至索引访问,而非依赖为每个路径单独物化二级索引(具体下推与优化行为以实际版本与计划为准)。