Creare un UNIQUE multicolumn INDEX su (product_id, variant_id)
:
CREATE UNIQUE INDEX line_items_prod_id_var_id_idx
ON line_items (product_id, variant_id);
Tuttavia, questo consentirebbe più voci di (1, NULL)
per (product_id, variant_id)
perchè NULL
valori non sono considerate identiche.
per compensare che, in aggiunta a creare un partial UNIQUE INDEX su product_id
:
CREATE UNIQUE INDEX line_items_prod_id_var_null_idx
ON line_items (product_id)
WHERE variant_id IS NULL;
In questo modo è possibile inserire (1,2)
, (1,3)
e (1, NULL)
, ma nessuno dei due per la seconda volta. Accelera anche le query con condizioni su una o entrambe le colonne.
Questo answer on dba.SE di recente ho scritto è molto simile e quasi direttamente applicabile al tuo problema.
fonte
2012-01-18 22:02:54