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
![PostgreSQL index types (10K)](https://www.navicat.com/link/Blog/Image/2024/20240426/CN/PostgreSQL%20index%20types.jpg)
下面是填充了上述所有字段的 btree_customer_id_idx 索引:
![btree_customer_id_idx_index (35K)](https://www.navicat.com/link/Blog/Image/2024/20240426/CN/btree_customer_id_idx_index.jpg)
点击“保存”按钮后,将会创建该索引。
2. 哈希索引:
哈希(Hash)索引对于等值检查是最佳的,但对于范围查询则不太有效。它们使用哈希函数将键映射到索引条目。以下是如何在“inventory”表的“film_id”列上创建哈希索引,首先使用 DML 语句:
CREATE INDEX hash_film_id_idx ON inventory USING HASH(film_id);
现在,使用 Navicat 创建的哈希索引如下:
![hash_film_id_idx_index (34K)](https://www.navicat.com/link/Blog/Image/2024/20240426/CN/hash_film_id_idx_index.jpg)
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 索引:
![gin_title_idx_index (47K)](https://www.navicat.com/link/Blog/Image/2024/20240426/CN/gin_title_idx_index.jpg)
6. BRIN 索引:
块范围索引(BRIN)适用于包含已排序数据的大型表,因为它索引的是数据块的范围,而不是单独的行。它对于相邻值存在相关性的列是非常有效的。以下是如何在“rental”表的“rental_date”列中创建 BRIN 索引的方法:
CREATE INDEX brin_rental_date_idx ON rental USING brin(rental_date);
以下是在 Navicat 中创建的 brin_rental_date_idx 索引:
![brin_rental_date_idx_index (39K)](https://www.navicat.com/link/Blog/Image/2024/20240426/CN/brin_rental_date_idx_index.jpg)
结语
PostgreSQL 提供了多种索引类型,已满足不同数据类型和查询需求。了解每个索引类型的特性有助于数据库管理者和开发者在优化数据库性能时做出合理的决策。同时,使用如 Navicat for PostgreSQL 16 这样的工具可以大大简化索引的使用。