搜索索引与二级索引

本页面介绍了搜索索引和二级索引的功能。

在搜索索引和二级索引之间进行选择时,请记住,搜索索引应是全文应用场景的默认选择,而二级索引应是其他所有应用场景的默认选择。下表介绍了何时使用每种类型的索引。

功能 二级索引 搜索索引
排列顺序 索引按所有索引键列进行排序 搜索索引最多只能按两个用户控制的 INT64 列进行排序
数组 您无法将数组数据类型值用作二级索引中的键。 搜索索引支持数组索引编制。文档的所有 token 都位于同一分块中。因此,更改一行的事务只会写入到一个索引分块。
JSON/JSONB 您无法将 JSON 值用作二级索引中的键。 搜索索引支持为 JSON 值编制索引。
查找 按索引键查找只需访问一个分块 使用搜索索引的查询通常需要从给定分区的所有分块中读取数据。唯一的例外是 Top-K 模式匹配。
多列索引编制 二级索引可以包含多个键列。查询需要按索引键列的前缀查找数据,以便高效执行。 搜索索引可以为多个列编制索引。查询可以针对已编制索引的列的任何子集指定复杂的逻辑表达式(合取、析取、否定),并且仍能高效执行
索引交集 用户可以重新编写查询,以联接多个二级索引。 多个已编制索引的列的交集先通过高效的本地 Z 型联接,然后通过分布式合并联合(用于合并来自所有相关分块的结果)来实现。
读取数据 SQL 查询或读取 API SQL 查询

除了语义之外,用于创建搜索索引的 DDL 语句的语法与用于创建二级索引的 DDL 语法不同:

  • 在搜索索引中,已编制索引的列与排列顺序分开定义。
  • CREATE SEARCH INDEX 语句的 ON 子句中 TOKENLIST 列的顺序无关紧要。

后续步骤