PostgreSQL索引

什麼是索引?

索引是用於加速從數據庫檢索數據的特殊查找表。數據庫索引類似於書的索引(目錄)。 索引爲出現在索引列中的每個值創建一個條目。

數據庫索引的重要特點

  • 索引使用SELECT查詢和WHERE子句加速數據輸出,但是會減慢使用INSERTUPDATE語句輸入的數據。

  • 您可以在不影響數據的情況下創建或刪除索引。

  • 可以通過使用CREATE INDEX語句創建索引,指定創建索引的索引名稱和表或列名稱。

  • 還可以創建一個唯一索引,類似於唯一約束,該索引防止列或列的組合上有一個索引重複的項。

PostgreSQL創建索引

CREATE INDEX語句用於創建PostgreSQL索引。

語法

CREATE INDEX index_name ON table_name;

索引類型

PostgreSQL中有幾種索引類型,如B-treeHashGiSTSP-GiSTGIN等。每種索引類型根據不同的查詢使用不同的算法。 默認情況下,CREATE INDEX命令使用B樹索引。

單列索引

如果僅在一個表列中創建索引,則將其稱爲單列索引。

語法:

CREATE INDEX index_name  
ON table_name (column_name);

示例

我們有一個名爲「EMPLOYEES」的表,具有以下數據:
PostgreSQL索引

在表「EMPLOYEES」的「name」列上創建一個名爲「employees_index」的索引。

執行以下創建語句:

CREATE INDEX employees_index  
ON EMPLOYEES (name);

執行結果如下 -

PostgreSQL索引

在這裏,您可以看到在該表上創建了一個名爲「employees_index」的索引 -
PostgreSQL索引

多列索引

如果通過使用表的多個列創建索引,則稱爲多列索引。

語法:

CREATE INDEX index_name  
ON table_name (column1_name, column2_name);

讓我們在同一個表「EMPLOYEES」上創建一個名爲「multicolumn_index」的多列索引

執行以下創建查詢語句:

CREATE INDEX multicolumn_index  
ON EMPLOYEES (name, salary);

執行結果如下 -

PostgreSQL索引

唯一索引

創建唯一索引以獲取數據的完整性並提高性能。它不允許向表中插入重複的值,或者在原來表中有相同記錄的列上也不能創建索引。

語法:

CREATE UNIQUE INDEX index_name  
on table_name (column_name);

例如,在employees表的name字段上創建一個唯一索引,將會提示錯誤 -

CREATE UNIQUE INDEX unique_on_name  
on employees (name);

如下所示(name字段中有兩個Minsu的值) -

PostgreSQL索引

PostgreSQL刪除索引

DROP INDEX方法用於刪除PostgreSQL中的索引。 如果你放棄一個索引,那麼它可以減慢或提高性能。

語法:

DROP INDEX index_name;

作爲一個示例,我們現在來刪除在前面創建的名爲「multicolumn_index」的索引。

執行以下查詢語句:

DROP INDEX multicolumn_index;

現在,您可以看到名爲「multicolumn_index」的索引已被刪除/刪除。查看 employees 表的結構 -

PostgreSQL索引

什麼時候應該避免使用索引?

  • 應該避免在小表上使用索引。
  • 不要爲具有頻繁,大批量更新或插入操作的表創建索引。
  • 索引不應用於包含大量NULL值的列。
  • 不要在經常操作(修改)的列上創建索引。