【问题标题】:Indices in PostgresqlPostgresql 中的索引
【发布时间】:2018-04-15 22:20:28
【问题描述】:

Postgres 数据库中有一个表,数据被永久插入其中。我需要快速访问数据,所以我为它创建了一个索引。我知道在大多数数据已经插入之后创建索引会更好,但我没有这样的时刻,数据或多或少是连续插入的。我应该什么时候在这样的表上创建索引?

每小时大约有 40-50 000 次插入,数据应保存数周(可能 2-3 个月)。没有更新,没有删除。

sqlite 中的旧实现每小时都有一个数据库(一个单独的文件),但创建索引花费了太多时间,并且几乎在插入后(5-10 分钟后)几乎立即需要快速访问。

【问题讨论】:

  • 您可能对table partitioning 感兴趣。在这种情况下,应该为每个分区分别创建索引,通常是在创建分区之后。
  • 只需创建索引,插入内容就会保持最新,有什么问题?
  • 每秒插入约 11-14 次。我认为这并没有那么高到您应该过多担心插入更新的索引的影响,除非您的测试证明并非如此。

标签: database postgresql sqlite indexing


【解决方案1】:

创建表的物化视图。在视图上创建索引,而不是在表上。插入表格并从视图中读取。

定期刷新实体化视图,比如每 5 分钟一次。您也可以考虑使用 CONCURRENTLY 参数。

但是这样你的阅读并没有得到最新的更新数据。如果不尝试,很难说性能特征是否更可取。

【讨论】:

    猜你喜欢
    • 2021-06-16
    • 1970-01-01
    • 2014-08-06
    • 2018-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多