12.2. 索引类型

LightDB提供了多种索引类型: B-tree、Hash、GIN。每一种索引类型使用了 一种不同的算法来适应不同类型的查询。默认情况下, CREATE INDEX 命令创建适合于大部分情况的B-tree 索引。 在索引类型名后面加上关键字USING , 可以选择其他的索引类型,例如, 创建一个HASH索引:

      CREATE INDEX name ON table USING HASH (column);
      

B树可以处理可以排序的数据上的等值和范围查询。特别是,在涉及使用以下运算符之一进行比较的索引列时,LightDB查询优化器将考虑使用B树索引:

<
<=
=
>=
>

这些运算符的组合等效结构,如BETWEENIN,也可以使用B树索引搜索实现。此外,对索引列的IS NULLIS NOT NULL条件可以与B树索引一起使用。

优化器也会将B-tree索引用于涉及到模式匹配操作符LIKE~ 的查询,前提是如果模式是一个常量且被固定在字符串的开头—例如:col LIKE 'foo%'或者col ~ '^foo', 但在col LIKE '%bar'上则不会。但是,如果我们的数据库没有使用C区域设置,我们需要创建一个具有特殊操作符类的索引来支持模式匹配查询,参见下面的Section 12.10。同样可以将B-tree索引用于ILIKE~*,但仅当模式以非字母字符开始,即不受大小写转换影响的字符。

B-tree索引也可以用于检索排序数据。这并不会总是比简单扫描和排序更快,但是总是有用的。

哈希索引只能处理简单的等值比较。查询优化器将在涉及使用=运算符进行比较的索引列时,考虑使用哈希索引。以下命令用于创建哈希索引:

CREATE INDEX name ON table USING HASH (column);

GIN索引是逆向索引,适用于包含多个组件值的数据值,例如数组。逆向索引包含每个组件值的单独条目,并且可以高效地处理测试特定组件值存在性的查询。

GIN可以支持许多不同的用户定义索引策略,可以使用GIN索引的特定运算符取决于索引策略。例如,LightDB的标准分发版包括用于数组的GIN运算符类,这些运算符支持使用以下运算符进行索引查询:

<@
@>
=
&&

(有关这些运算符的含义,请参见Section 10.19。) 许多其他GIN运算符类可在contrib集合或作为单独的项目中使用。