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 索引: