Postgresql
部分主鍵 是否需要索引?
在 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
。