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