dav*_*ley 7 postgresql performance query-performance
我们在 PostgreSQL 数据库中有一个表,它每天以数百万行的速度增长。
每行包括:
ID
Foreign user ID
Date and time
Other data
Run Code Online (Sandbox Code Playgroud)
日期和时间不是严格单调的ID
,但它们很接近。
查询此表时,我们只对获取给定外部用户 ID 的行感兴趣,其中包含最近两周的日期和时间。永远不会查询超过两周的行,但我们希望保留它们以供存档。
鉴于此特殊用例:
这是表分区的经典用法。将表分成两部分(或更多),一部分包含热数据,另一部分包含旧存档数据。在热表上索引您需要的任何内容,并使用较少的索引来节省空间并节省insert
冷表上的时间。
启用约束排除后,仅new_table
当您的查询匹配分区约束时,Pg 才会自动扫描。
如果您的查询不都使用相同的约束,您可以添加一个where
使用该约束的测试,或者只查询new_table
分区。
或者,您可以创建仅覆盖您感兴趣的范围的部分索引。同样,这些仅在您的查询使用约束 Pg 可以识别为匹配部分索引时才有效。在您的情况下,您必须随着时间的推移创建和删除它们以保持您的时间范围相关,因为您无法对像WHERE (some_field > current_timestamp - INTERVAL '2' week)
.
归档时间: |
|
查看次数: |
455 次 |
最近记录: |