【问题标题】:Optimizing dataset with a composite primary key that includes a status field使用包含状态字段的复合主键优化数据集
【发布时间】:2019-11-08 18:14:55
【问题描述】:

我可能想多了,但我正在考虑优化大型数据集的机会。我有一个表模式,其内容主要通过其主键和状态字段获取。如果我以某种方式将状态字段包含为复合主键的一部分以加快搜索速度,是否可以进行任何优化?因此,例如,我的表架构可能类似于:

CREATE TABLE object_t (
    object_id SERIAL PRIMARY KEY NOT NULL,
    status VARCHAR CHECK (status ~ '(Astatus|Bstatus|Cstatus|Dstatus)'),
    contents TEXT
);

我的查询几乎总是像

SELECT * FROM object_t WHERE search condition AND status = ...

大型数据集调整架构是否有任何优势:

PRIMARY KEY (object_id, status)

此外,我与此表连接的表也始终包含该状态过滤器。然后我应该将外键约束调整为:

FOREIGN KEY (object_id, status) REFERENCES object_t (object_id, status)

这里是否有任何优化,或者只是尽可能地使用 object_id 和 status 过滤器?

【问题讨论】:

    标签: postgresql database-design schema primary-key


    【解决方案1】:

    您建议的索引很可能没有有帮助。

    只有在查询中也存在与此类似的条件时,它才会提供好处:

    WHERE object_id = ? AND status = ?
    

    如果WHERE条件中只有status,则根本无法使用索引。

    status 这个名字表明没有太多不同的值。这意味着这样的条件通常不是很有选择性,这不利于对其进行索引。

    如果您总是查询某个status,部分索引可能会有所帮助。

    但你能做的最好的事情就是实验。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-07
      • 2019-11-18
      • 1970-01-01
      相关资源
      最近更新 更多