【问题标题】:Postgres IndexingPostgres 索引
【发布时间】:2016-10-18 01:52:52
【问题描述】:

我是 Postgres 的新手。

我们使用 Postgres 在我们的项目中实现了 SCD type-2。输入文件是一个完整的刷新文件,每天大约有 3000 万条记录。

帐号是关键列。

新记录的大约数量为 20K/天。 如果源中缺少记录,则该记录将在目标中以结束日期关闭。大约关闭的记录数 - 10k/天

查询的运行时间正在稳步增加。索引是否有助于加快流程?

对要使用的索引有什么建议吗?

【问题讨论】:

  • 索引应该会有所帮助。您应该提供示例数据和新数据的示例。
  • Hi Gordon- 如果文件中有一个不在目标中的帐号,我们将记录标记为新记录并插入它。如果文件中的帐号存在于目标中,并且帐号的属性发生更改,则完成更新。
  • 除非您显示实际代码,否则很难分辨

标签: sql postgresql indexing scd scd2


【解决方案1】:

这 3000 万条记录是否以每一行的形式存储在数据库中?好吧,如果是这样,那么索引(创建和维护)许多记录在某种程度上也将成为数据库的负担。但是,PostgreSQL 引入了一个名为 BRIN Index 的新索引,它可能会对您有所帮助。几个月前我写了一篇关于这个的博客。你可以看看它,显然可以对它进行更多研究。

http://blog.bajratechnologies.com/2016/09/16/Postgres-BRIN-Index/

【讨论】:

  • Hi Pragun - 3000 万条记录以每行的形式存储在数据库中。
  • 那么对于我们创建的常规索引,即 btree 索引,数据库每天创建和更改 3000 万个索引。那是不是很大?我的意思是,即使是索引空间也加起来就是数据库空间。所以你可以试试BRIN Index,但我不能保证性能会提高。这完全取决于您的数据库设计、结构和配置。
【解决方案2】:

您将不得不查看慢速查询的执行计划,以确定索引是否有帮助以及您应该创建哪些索引。

正确的索引通常对查询有很大帮助,并且对于只读数据库,您可以根据需要创建任意数量的索引。

您应该确保在加载表之后创建任何索引,因为索引会大大降低插入速度。在每日加载之前删除并重新创建表,或者截断并删除所有索引。

【讨论】:

    猜你喜欢
    • 2012-09-06
    • 2010-11-15
    • 2012-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-01
    相关资源
    最近更新 更多