多对多关系中的 Junction table 索引

Junction table indexing in many-to-many relationship

假设我们有一个 PRODUCT table、ORDER table 和一个交汇点 table PRODUCT_ORDER.

我使用以下脚本创建了一个连接 table:

CREATE TABLE public."PRODUCT_ORDER" (

    product_id bigint NOT NULL,
    order_id bigint NOT NULL,

    CONSTRAINT "PRODUCT_ORDER_PK" PRIMARY KEY (product_id, order_id),

    CONSTRAINT "FK_TO_PRODUCT" FOREIGN KEY (product_id)
        REFERENCES public."PRODUCT" (id) ON DELETE CASCADE,

    CONSTRAINT "FK_TO_ORDER" FOREIGN KEY (order_id)
        REFERENCES public."ORDER" (id) ON DELETE CASCADE
);

还自动创建了 PK 的索引:

CREATE UNIQUE INDEX "PRODUCT_ORDER_PK" ON public."PRODUCT_ORDER" USING btree (product_id, order_id)

预计这些 table 几乎只有读取操作,我想智能地索引结点 table。

通常,我会另外手动为外键创建一个索引,例如对于 one-to-many 关系,像这样:

CREATE INDEX "index_name" ON schema_name."table_name" (fk_column_name);

我的问题是:除了PK-index之外,我还需要为外键创建两个索引吗:

 CREATE INDEX "FK_TO_PRODUCT" ON public."PRODUCT_ORDER" (product_id);
 CREATE INDEX "FK_TO_ORDER" ON public."PRODUCT_ORDER"(order_id);

还是说没必要,没意义,PK的指标就够了?

一般来说,我感兴趣的是如何intelligently/correctly为多对多关系的联结table建立索引?

如果您需要任何说明,请告诉我并提前致谢!

不,您不需要创建两个额外的密钥。您的主键索引将适用于第一个键 (product_id) 以及键对。

您需要在 order_id 上增加一个索引。