Postgresql
Postgres:我可以將索引與 FK 約束相關聯嗎?
Postgres FK 約束和索引是獨立的。
最近,我正在尋找未使用的索引,並發現了通過以下方式消除約束執行所需的索引的技巧:
WHERE NOT EXISTS (SELECT 1 FROM pg_constraint c WHERE c.conindid = pg_stat_user_indexes.indexrelid)
我們獨立於索引創建了 FK 約束。
是否有可能以某種方式
pg_constraint.conindid
將索引與 FK 約束相關聯,以便從 FK 指向索引?就像是:
ALTER TABLE my ALTER CONSTRAINT my_your_fk USING INDEX my_your_fk_i;
更新我在 Postgres 文件中看到了一些相關的內容:
ALTER TABLE distributors DROP CONSTRAINT distributors_pkey, ADD CONSTRAINT distributors_pkey PRIMARY KEY USING INDEX dist_id_temp_idx;
我不是 100% 確定你在問什麼。
您的查詢顯示了外鍵約束與目標索引的關聯。
源索引和外鍵約束之間沒有關聯。
您可以使用此查詢查找源中沒有索引的所有外鍵,這些外鍵支持對目標表進行快速更新和鍵修改:
SELECT conrelid::regclass, conname FROM pg_constraint AS c WHERE c.contype = 'f' AND NOT EXISTS (SELECT 1 FROM pg_index AS i WHERE i.indrelid = c.conrelid AND (i.indkey::smallint[])[0:cardinality(c.conkey)-1] @> c.conkey);
奇怪的條件將測試第一個索引列是否與外鍵定義中的列相同。