PostgreSQL 是一個(gè)受歡迎的開(kāi)源關(guān)系型數據庫管理系統,它提供了多種索引類(lèi)型以?xún)?yōu)化查詢(xún)性能和提高數據檢索效率。本文中,我們將學(xué)習如何在 PostgreSQL 中創(chuàng )建不同類(lèi)型的索引。盡可能地,我們通過(guò)使用 DML 語(yǔ)句和 Navicat for PostgreSQL 16 ,將索引應用到免費的 "dvdrental" 示例數據庫 中。

 

1. B 樹(shù)(B-Tree)索引:


B 樹(shù)索引是 PostgreSQL 中的默認索引類(lèi)型,適用于多種數據類(lèi)型,包括文本、數字和時(shí)間戳。它使用平衡樹(shù)結構組織數據,有利于高效的范圍查詢(xún)和等值搜索。讓我們在“payment”表中的“customer_id”列上創(chuàng )建一個(gè) B 樹(shù)索引:

CREATE INDEX btree_customer_id_idx ON payment(customer_id);

Navicat 中,你會(huì )在表設計器的索引選項卡中查看到索引。要創(chuàng )建上述的索引,我們需要在字段中輸入“btree_customer_id_idx”,在字段中選擇“customer_id”,并從索引方法的下拉列表中選擇“B-Tree”s

 

 

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

 

 

點(diǎn)擊保存按鈕后,將會(huì )創(chuàng )建該索引。

 

2. 哈希索引:

哈希(Hash)索引對于等值檢查是最佳的,但對于范圍查詢(xún)則不太有效。它們使用哈希函數將鍵映射到索引條目。以下是如何在“inventory”表的“film_id”列上創(chuàng )建哈希索引,首先使用 DML 語(yǔ)句:

CREATE INDEX hash_film_id_idx ON inventory USING HASH(film_id);

現在,使用 Navicat 創(chuàng )建的哈希索引如下:

 

 

3. GiST 索引:

通用搜索樹(shù)(GiST)索引支持各種數據類(lèi)型和復雜的查詢(xún),因此非常適合全文搜索和幾何數據類(lèi)型等應用。

這是在 geometry 列上創(chuàng )建 GiST 索引的例子:

CREATE INDEX index_geometry ON table_name USING GIST (geometry_column);

 

4. SP-GiST 索引:

空間分區通用搜索樹(shù)(SP-GiST)索引適用于具有多維度或層次結構的數據類(lèi)型,它們能夠高效地對非平衡樹(shù)進(jìn)行索引。

這是在 tsvector 列上創(chuàng )建 SP-GiST 索引的例子:

CREATE INDEX index_text_search ON table_name USING SPGIST (tsvector_column);

 

5. GIN 索引:

通用倒排索引(GIN)是全文搜索、組類(lèi)型和復合數據類(lèi)型的理想選擇。它們對于具有多個(gè)鍵或組件的數據類(lèi)型是非常有效的。讓我們在“film”表的“title”列中創(chuàng )建一個(gè) GIN 索引來(lái)進(jìn)行全文搜索:

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

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

 

 

6. BRIN 索引:

塊范圍索引(BRIN)適用于包含已排序數據的大型表,因為它索引的是數據塊的范圍,而不是單獨的行。它對于相鄰值存在相關(guān)性的列是非常有效的。以下是如何在“rental”表的“rental_date”列中創(chuàng )建 BRIN 索引的方法:

CREATE INDEX brin_rental_date_idx ON rental USING brin(rental_date);

以下是在 Navicat 中創(chuàng )建的 brin_rental_date_idx 索引: