Postgresql

是否有在聯結/關聯表的外鍵上創建單獨索引的案例?

  • February 12, 2020

想像一個帶有(虛擬碼)列的關聯/聯結表,例如:junction_table_

id_of_table_x REFERENCES TABLE X
id_of_table_y REFERENCES TABLE Y

PRIMARY KEY (id_of_table_x, id_of_table_y)

因此id_of_table_xid_of_table_y外鍵引用其他表的某些主鍵並用作複合主鍵。

現在我可以補充:

CREATE INDEX some_index ON junction_table_ (id_of_table_x);

CREATE INDEX some_index ON junction_table_ (id_of_table_y);

這會產生任何(積極的)影響嗎?

單列上的單獨索引的有效案例是什麼?

例如,在需要檢查目標是否仍被引用的連接或刪除操作中對兩個外鍵之一進行 WHERE 過濾的查詢 - 它們是否從單獨的附加索引中獲利。

您不需要為主鍵的第一列(id_of_table_x在您的範例中)設置單獨的索引,因為 Postgres 會很樂意在每種情況下使用該索引,因為它會在第一列上使用單列索引。

如果您經常從引用的表中刪除行,那麼在第二列上添加另一個索引有助於在刪除期間驗證外鍵。

第二列上的索​​引可能有助於僅使用該索引(但不是第一列)的連接。

引用自:https://dba.stackexchange.com/questions/259528