在PostgreSql数据库中考虑以下表定义:
CREATE TABLE data (
id bigint NOT NULL,
updateRound timestamp WITH time zone NOT NULL
);
CREATE UNIQUE INDEX idx_unique_data ON data (id, updateRound DESC);
ALTER TABLE data ADD CONSTRAINT pk_data PRIMARY KEY (id, updateRound);
此代码创建2个索引,而1个索引应足够。但是,我不能在主键定义上添加排序顺序。如果我离开一张没有主键的桌子,我会感到内。
什么是最好的方法?
编辑:PostgreSql多列索引排序以供参考:https://www.postgresql.org/docs/current/static/indexes-ordering.html
编辑2:Primary key with ASC or DESC ordering?中的详细说明。但是,我知道PostgreSql不接受对主键约束的排序:只能对索引进行排序。但是当涉及到实现时,PostgreSql为上述定义生成2个索引。我希望主索引约束可以重用第一个索引。
答案 0 :(得分:0)
我想您需要该索引来支持ORDER BY
,对吗?
我想不到WHERE
条件会要求第二列以降序排列。
由于两列都定义为NOT NULL
,所以唯一索引的行为就像主键约束一样,并且可以用作外键约束的目标。
因此,除非您有一个检查约束的工具,如果找不到约束,否则该工具将失败,或者除非您需要INSERT ... ON CONFLICT
的约束,否则我认为拥有索引就足够了。