我有一个结构如下所示的表:
CREATE TABLE IF NOT EXISTS tblvideolikes (
itemid SERIAL PRIMARY KEY,
videoid integer NOT NULL,
userid integer NOT NULL,
CONSTRAINT liked_video_user UNIQUE(videoid,userid)
)
字符串
我有很多选择查询与userid和videoid.我想知道是否添加两列上的唯一约束是足够的,或者我需要做索引,以及对他们两个.我已经搜索了很多关于这一点,但没有什么使它清楚.
2条答案
按热度按时间wqsoz72f1#
如果必须强制两列的唯一组合,则必须在它们上创建唯一索引。
如果你的
where
子句只在索引的第一列有一个条件,Postgres也会使用这个索引(通常的“它取决于”索引的使用仍然适用于这里)。对于
where
条件,Postgres可以使用不是索引的前导列的列-但是,这比使用前导列效率低。我会把那个列放在第一位,它经常被用作单个
where
条件。列的顺序与唯一性无关。如果(仅)第二列的使用与(仅)第一列的使用一样频繁,则添加仅包含第二列的附加索引可能是有意义的,例如:
字符串
然后,唯一索引将用于仅
videoid
上的条件和使用两列的(相等)条件。无关,但是:
itemid
主键在上面的设置中几乎没有用处。您不必要地增加了表的大小并添加了另一个需要维护的索引。您可以简单地将其删除并将videoid, userid
声明为主键:型
au9on6nz2#
如果您要从两端进行频繁的查询,那么分别对这两个列进行索引是一个更好的主意。
添加唯一约束是主观的-如果
userid
只喜欢videoid
一次,那么它是有意义的,但是,由于唯一约束,这会对性能产生额外的影响。