Postgresql

部分主鍵 是否需要索引?

  • February 11, 2021

在 Postgres 中,如果我打算有時在 WHERE 子句中使用僅包含 field2 的查詢,那麼在下表中的 field2 上創建索引是否有益於查詢性能?

CREATE TABLE my_table (
   field1   INT NOT NULL,
   field2   INT NOT NULL,

   CONSTRAINT pk_my_table PRIMARY KEY (field1, field2)
);

範例查詢(“獲取 field2 = my_value 的所有記錄”):

SELECT * FROM my_table WHERE field2 = my_value;

換句話說,我還應該包括:

CREATE INDEX ix_my_table_field2 ON my_table(field2);

複合索引還可以支持比較位於索引值開頭的列(但不是全部)的查詢。因此,索引(field1, field2)(為主鍵隱式創建)也將支持僅比較的查詢field1

但它不支持僅比較其末尾列(但不是全部)的查詢。因此(field1, field2)不支持僅比較的查詢field2

所以是的,您只需要創建一個額外的索引才有(field2)機會支持僅比較的查詢field2

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