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」的表,具有以下資料:

在表「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值的列。
  • 不要在經常操作(修改)的列上建立索引。