gpt4 book ai didi

sql - PostgreSQL 分区和索引

转载 作者:搜寻专家 更新时间:2023-10-30 20:53:52 25 4
gpt4 key购买 nike

我是 PostgreSQL(版本 9)分区的新手,我需要一个建议。我有一套 A 国零件和另一套 B 国零件。每套大约有 200 万条记录。我需要将这两个集合加载到数据库中。每套都需要每周更新一次。通过更新集合,我的意思是清除集合的所有数据并从文件中重新加载它。集合应该独立更新,所以当清除集合 A 的数据时,我不能清除集合 B 的数据。我知道当我将每个集合存储在一个单独的分区中时,我可以独立截断每个分区,这比删除记录快得多。所以我决定这样做(表“部分”中有更多列,但它们对于这个问题并不重要):

CREATE TABLE part (
country CHAR(3) NOT NULL,
manufacturer_code CHAR(2) NOT NULL,
part_code CHAR(4) NOT NULL,
part_description VARCHAR(100)
);

CREATE TABLE part_cze (
CHECK (country = 'CZE')
) INHERITS (part);

CREATE INDEX idx__part_cze ON part_cze (part_code, manufacturer_code);

CREATE TABLE part_svk (
CHECK (country = 'SVK')
) INHERITS (part);

CREATE INDEX idx__part_svk ON part_svk (part_code, manufacturer_code);

应用程序查询表“part”以获取数据。查询可能如下所示:

SELECT * FROM part WHERE country='CZE' AND part_code='4578' AND manufacturer_code='22'

我的问题:

  1. 以上方案是否正确,或者您会推荐其他方案吗?
  2. 我需要在表 partpart_cze 上建立索引吗?如果我理解得很好,Postgres 从具有索引的表 part_cze 中获取数据,因此表 part 不需要它。
  3. 索引 idx__part_cze 是否应该包含国家列,或者数据按国家/地区分隔到分区是否足够?
  4. 如果我在表 part 上创建索引,它应该包含 country 列吗?

最佳答案

  1. 看起来不错,除了您没有定义主键,但这不是 postgres 的要求。

  2. 只要该表中没有大量数据,“部分”就不需要索引。

  3. 国家不应该在索引中 postgres 将根据检查约束选择正确的表。将国家/地区放入索引只会使索引变得更大,从而降低效率。

  4. 如果您在该表中放置了大量数据,则只为该部分创建索引。然后根据查询和表中的实际数据,将国家/地区放入索引可能会或可能不会有帮助。

关于sql - PostgreSQL 分区和索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31560727/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com