PostgreSQL 是一个受欢迎的开源关系型数据库管理系统,它提供了多种索引类型以优化查询性能和提高数据检索效率。本文中,我们将学习如何在 PostgreSQL 中创建不同类型的索引。尽可能地,我们通过使用 DML 语句和 Navicat for PostgreSQL 16 ,将索引应用到免费的 "dvdrental" 示例数据库 中。

 

1. B 树(B-Tree)索引:


B 树索引是 PostgreSQL 中的默认索引类型,适用于多种数据类型,包括文本、数字和时间戳。它使用平衡树结构组织数据,有利于高效的范围查询和等值搜索。让我们在“payment”表中的“customer_id”列上创建一个 B 树索引:

CREATE INDEX btree_customer_id_idx ON payment(customer_id);

Navicat 中,你会在表设计器的索引选项卡中查看到索引。要创建上述的索引,我们需要在字段中输入“btree_customer_id_idx”,在字段中选择“customer_id”,并从索引方法的下拉列表中选择“B-Tree”s

 

 

下面是填充了上述所有字段的 btree_customer_id_idx 索引:

 

 

点击保存按钮后,将会创建该索引。

 

2. 哈希索引:

哈希(Hash)索引对于等值检查是最佳的,但对于范围查询则不太有效。它们使用哈希函数将键映射到索引条目。以下是如何在“inventory”表的“film_id”列上创建哈希索引,首先使用 DML 语句:

CREATE INDEX hash_film_id_idx ON inventory USING HASH(film_id);

现在,使用 Navicat 创建的哈希索引如下:

 

 

3. GiST 索引:

通用搜索树(GiST)索引支持各种数据类型和复杂的查询,因此非常适合全文搜索和几何数据类型等应用。

这是在 geometry 列上创建 GiST 索引的例子:

CREATE INDEX index_geometry ON table_name USING GIST (geometry_column);

 

4. SP-GiST 索引:

空间分区通用搜索树(SP-GiST)索引适用于具有多维度或层次结构的数据类型,它们能够高效地对非平衡树进行索引。

这是在 tsvector 列上创建 SP-GiST 索引的例子:

CREATE INDEX index_text_search ON table_name USING SPGIST (tsvector_column);

 

5. GIN 索引:

通用倒排索引(GIN)是全文搜索、组类型和复合数据类型的理想选择。它们对于具有多个键或组件的数据类型是非常有效的。让我们在“film”表的“title”列中创建一个 GIN 索引来进行全文搜索:

CREATE INDEX gin_title_idx ON film USING gin(to_tsvector('english', title));

以下是在 Navicat “film”表的索引选项卡中添加了 gin_title_idx 索引:

 

 

6. BRIN 索引:

块范围索引(BRIN)适用于包含已排序数据的大型表,因为它索引的是数据块的范围,而不是单独的行。它对于相邻值存在相关性的列是非常有效的。以下是如何在“rental”表的“rental_date”列中创建 BRIN 索引的方法:

CREATE INDEX brin_rental_date_idx ON rental USING brin(rental_date);

以下是在 Navicat 中创建的 brin_rental_date_idx 索引: