LightDB提供了多种索引类型:
B-tree、Hash、GIN。每一种索引类型使用了
一种不同的算法来适应不同类型的查询。默认情况下,
CREATE
INDEX
命令创建适合于大部分情况的B-tree 索引。
在索引类型名后面加上关键字USING
, 可以选择其他的索引类型,例如, 创建一个HASH索引:
CREATE INDEXname
ONtable
USING HASH (column
);
B树可以处理可以排序的数据上的等值和范围查询。特别是,在涉及使用以下运算符之一进行比较的索引列时,LightDB查询优化器将考虑使用B树索引:
< |
<= |
= |
>= |
> |
这些运算符的组合等效结构,如BETWEEN
和IN
,也可以使用B树索引搜索实现。此外,对索引列的IS NULL
或IS NOT NULL
条件可以与B树索引一起使用。
优化器也会将B-tree索引用于涉及到模式匹配操作符LIKE
和~
的查询,前提是如果模式是一个常量且被固定在字符串的开头—例如:col LIKE
'foo%'
或者col ~ '^foo'
, 但在col LIKE '%bar'
上则不会。但是,如果我们的数据库没有使用C区域设置,我们需要创建一个具有特殊操作符类的索引来支持模式匹配查询,参见下面的Section 12.10。同样可以将B-tree索引用于ILIKE
和~*
,但仅当模式以非字母字符开始,即不受大小写转换影响的字符。
B-tree索引也可以用于检索排序数据。这并不会总是比简单扫描和排序更快,但是总是有用的。
哈希索引只能处理简单的等值比较。查询优化器将在涉及使用=
运算符进行比较的索引列时,考虑使用哈希索引。以下命令用于创建哈希索引:
CREATE INDEXname
ONtable
USING HASH (column
);
GIN索引是逆向索引,适用于包含多个组件值的数据值,例如数组。逆向索引包含每个组件值的单独条目,并且可以高效地处理测试特定组件值存在性的查询。
GIN可以支持许多不同的用户定义索引策略,可以使用GIN索引的特定运算符取决于索引策略。例如,LightDB的标准分发版包括用于数组的GIN运算符类,这些运算符支持使用以下运算符进行索引查询:
<@ |
@> |
= |
&& |
(有关这些运算符的含义,请参见Section 10.19。)
许多其他GIN运算符类可在contrib
集合或作为单独的项目中使用。