Nic*_*ilt 10 postgresql indexing null
我有一个line_items包含以下列的表:
product_id
variant_id
Run Code Online (Sandbox Code Playgroud)
variant_id 是可以为空的.
这是条件:
variant_id为NULL则product_id应该是唯一的.variant_id有一个值,则组合product_id和variant_id应该是唯一的.这可能在PostgreSQL中吗?
Erw*_*ter 28
创建一个UNIQUE多列索引上(product_id, variant_id):
CREATE UNIQUE INDEX line_items_prod_var_idx ON line_items (product_id, variant_id);
Run Code Online (Sandbox Code Playgroud)
但是,这将允许(1, NULL)for的多个条目,(product_id, variant_id)因为NULL值不被视为相同.
为了弥补的是,另外创建一个局部UNIQUE指数上product_id:
CREATE UNIQUE INDEX line_items_prod_var_null_idx ON line_items (product_id)
WHERE variant_id IS NULL;
Run Code Online (Sandbox Code Playgroud)
这样,您就可以进入(1,2),(1,3)并且(1, NULL),但是他们都没有第二次.还可以加快一列或两列条件的查询速度.
关于dba.SE的最新相关答案,几乎直接适用于您的案例:
| 归档时间: |
|
| 查看次数: |
8431 次 |
| 最近记录: |