- PostgreSQL 教程
- PostgreSQL - 首頁
- PostgreSQL - 概述
- PostgreSQL - 環境設定
- PostgreSQL - 語法
- PostgreSQL - 資料型別
- PostgreSQL - 建立資料庫
- PostgreSQL - 選擇資料庫
- PostgreSQL - 刪除資料庫
- PostgreSQL - 建立表
- PostgreSQL - 刪除表
- PostgreSQL - 模式
- PostgreSQL - 插入查詢
- PostgreSQL - 選擇查詢
- PostgreSQL - 運算子
- PostgreSQL - 表示式
- PostgreSQL - WHERE 子句
- PostgreSQL - AND & OR 子句
- PostgreSQL - 更新查詢
- PostgreSQL - 刪除查詢
- PostgreSQL - LIKE 子句
- PostgreSQL - LIMIT 子句
- PostgreSQL - ORDER BY 子句
- PostgreSQL - GROUP BY
- PostgreSQL - WITH 子句
- PostgreSQL - HAVING 子句
- PostgreSQL - DISTINCT 關鍵字
- 高階 PostgreSQL
- PostgreSQL - 約束
- PostgreSQL - 連線
- PostgreSQL - UNION 子句
- PostgreSQL - NULL 值
- PostgreSQL - 別名語法
- PostgreSQL - 觸發器
- PostgreSQL - 索引
- PostgreSQL - ALTER TABLE 命令
- TRUNCATE TABLE 命令
- PostgreSQL - 檢視
- PostgreSQL - 事務
- PostgreSQL - 鎖
- PostgreSQL - 子查詢
- PostgreSQL - 自動遞增
- PostgreSQL - 許可權
- 日期/時間函式和運算子
- PostgreSQL - 函式
- PostgreSQL - 有用函式
- PostgreSQL 介面
- PostgreSQL - C/C++
- PostgreSQL - Java
- PostgreSQL - PHP
- PostgreSQL - Perl
- PostgreSQL - Python
- PostgreSQL 有用資源
- PostgreSQL - 快速指南
- PostgreSQL - 有用資源
- PostgreSQL - 討論
PostgreSQL - 索引
索引是資料庫搜尋引擎可以使用以加速資料檢索的特殊查詢表。簡單來說,索引是指向表中資料的指標。資料庫中的索引與書籍後面的索引非常相似。
例如,如果您想參考書中討論某個特定主題的所有頁面,您必須首先參考索引,索引按字母順序列出所有主題,然後參考一個或多個特定頁碼。
索引有助於加快 SELECT 查詢和 WHERE 子句的速度;但是,它會減慢資料輸入、UPDATE 和 INSERT 語句的速度。可以建立或刪除索引,而不會影響資料。
建立索引涉及 CREATE INDEX 語句,該語句允許您命名索引,指定表以及要索引的列或列,並指示索引是升序還是降序。
索引也可以是唯一的,類似於 UNIQUE 約束,因為索引可以防止在存在索引的列或列組合中插入重複項。
CREATE INDEX 命令
CREATE INDEX 的基本語法如下:
CREATE INDEX index_name ON table_name;
索引型別
PostgreSQL 提供了幾種索引型別:B 樹、雜湊、GiST、SP-GiST 和 GIN。每種索引型別都使用不同的演算法,最適合不同型別的查詢。預設情況下,CREATE INDEX 命令建立 B 樹索引,這適合大多數常見情況。
單列索引
單列索引是僅基於一個表列建立的索引。基本語法如下:
CREATE INDEX index_name ON table_name (column_name);
多列索引
多列索引是在表的多個列上定義的。基本語法如下:
CREATE INDEX index_name ON table_name (column1_name, column2_name);
無論建立單列索引還是多列索引,都要考慮在查詢的 WHERE 子句中可能經常用作篩選條件的列。
如果僅使用一列,則應選擇單列索引。如果在 WHERE 子句中經常使用兩列或多列作為篩選器,則多列索引將是最佳選擇。
唯一索引
唯一索引不僅用於效能,還用於資料完整性。唯一索引不允許將任何重複值插入表中。基本語法如下:
CREATE UNIQUE INDEX index_name on table_name (column_name);
部分索引
部分索引是在表的子集上構建的索引;子集由條件表示式(稱為部分索引的謂詞)定義。該索引僅包含滿足謂詞的那些錶行的條目。基本語法如下:
CREATE INDEX index_name on table_name (conditional_expression);
隱式索引
隱式索引是在建立物件時由資料庫伺服器自動建立的索引。為主鍵約束和唯一約束自動建立索引。
示例
以下是一個示例,我們將為 COMPANY 表的 salary 列建立一個索引:
# CREATE INDEX salary_index ON COMPANY (salary);
現在,讓我們使用 \d company 命令列出 COMPANY 表上所有可用的索引。
# \d company
這將產生以下結果,其中 company_pkey 是一個隱式索引,在建立表時建立。
Table "public.company"
Column | Type | Modifiers
---------+---------------+-----------
id | integer | not null
name | text | not null
age | integer | not null
address | character(50) |
salary | real |
Indexes:
"company_pkey" PRIMARY KEY, btree (id)
"salary_index" btree (salary)
您可以使用 \di 命令列出整個資料庫範圍內的所有索引:
DROP INDEX 命令
可以使用 PostgreSQL DROP 命令刪除索引。刪除索引時應注意,因為效能可能會降低或提高。
基本語法如下:
DROP INDEX index_name;
您可以使用以下語句刪除先前建立的索引:
# DROP INDEX salary_index;
何時應避免使用索引?
儘管索引旨在增強資料庫的效能,但在某些情況下應避免使用它們。以下指南指示何時應重新考慮使用索引:
不應在小型表上使用索引。
具有頻繁、大型批處理更新或插入操作的表。
不應在包含大量 NULL 值的列上使用索引。
不應為經常操作的列建立索引。