PostgreSQL索引
什麼是索引?
索引是用於加速從數據庫檢索數據的特殊查找表。數據庫索引類似於書的索引(目錄)。 索引爲出現在索引列中的每個值創建一個條目。
數據庫索引的重要特點
索引使用
SELECT
查詢和WHERE
子句加速數據輸出,但是會減慢使用INSERT
和UPDATE
語句輸入的數據。您可以在不影響數據的情況下創建或刪除索引。
可以通過使用
CREATE INDEX
語句創建索引,指定創建索引的索引名稱和表或列名稱。還可以創建一個唯一索引,類似於唯一約束,該索引防止列或列的組合上有一個索引重複的項。
PostgreSQL創建索引
CREATE INDEX
語句用於創建PostgreSQL索引。
語法
CREATE INDEX index_name ON table_name;
索引類型
PostgreSQL中有幾種索引類型,如B-tree
,Hash
,GiST
,SP-GiST
和GIN
等。每種索引類型根據不同的查詢使用不同的算法。 默認情況下,CREATE INDEX
命令使用B樹索引。
單列索引
如果僅在一個表列中創建索引,則將其稱爲單列索引。
語法:
CREATE INDEX index_name
ON table_name (column_name);
示例
我們有一個名爲「EMPLOYEES
」的表,具有以下數據:
在表「EMPLOYEES
」的「name
」列上創建一個名爲「employees_index
」的索引。
執行以下創建語句:
CREATE INDEX employees_index
ON EMPLOYEES (name);
執行結果如下 -
在這裏,您可以看到在該表上創建了一個名爲「employees_index
」的索引 -
多列索引
如果通過使用表的多個列創建索引,則稱爲多列索引。
語法:
CREATE INDEX index_name
ON table_name (column1_name, column2_name);
讓我們在同一個表「EMPLOYEES
」上創建一個名爲「multicolumn_index
」的多列索引
執行以下創建查詢語句:
CREATE INDEX multicolumn_index
ON EMPLOYEES (name, salary);
執行結果如下 -
唯一索引
創建唯一索引以獲取數據的完整性並提高性能。它不允許向表中插入重複的值,或者在原來表中有相同記錄的列上也不能創建索引。
語法:
CREATE UNIQUE INDEX index_name
on table_name (column_name);
例如,在employees
表的name
字段上創建一個唯一索引,將會提示錯誤 -
CREATE UNIQUE INDEX unique_on_name
on employees (name);
如下所示(name
字段中有兩個Minsu
的值) -
PostgreSQL刪除索引
DROP INDEX方法用於刪除PostgreSQL中的索引。 如果你放棄一個索引,那麼它可以減慢或提高性能。
語法:
DROP INDEX index_name;
作爲一個示例,我們現在來刪除在前面創建的名爲「multicolumn_index
」的索引。
執行以下查詢語句:
DROP INDEX multicolumn_index;
現在,您可以看到名爲「multicolumn_index
」的索引已被刪除/刪除。查看 employees
表的結構 -
什麼時候應該避免使用索引?
- 應該避免在小表上使用索引。
- 不要爲具有頻繁,大批量更新或插入操作的表創建索引。
- 索引不應用於包含大量
NULL
值的列。 - 不要在經常操作(修改)的列上創建索引。