什么是PostgreSQL中的BRIN索引和表分区之间的区别?我何时应该使用其中一个而不是另一个?它们似乎提供非常相似的好处并且也有类似的用例。
举个例子,假设我们有以下表结构。
具有以下特征的表:
举个例子,假设我们有以下表结构。
CREATE TABLE orders (
id SERIAL PRIMARY KEY,
store_id INT,
client_id INT,
created_at timestamp,
information jsonb
)
具有以下特征的表:
- 只能插入订单,不允许删除,并且更新很少并且不涉及created_at列
- created_at列包含行在数据库中插入的时间戳,因此该列中的值严格递增
- 几乎每个查询都在条件中使用created_at列,其中一些可能使用store_id和client_id列
- 最常访问的行是根据created_at列的最新行
- 某些查询可能返回少量记录(例如:分析单个记录或创建在短时间间隔内的记录),而其他查询可能会扫描大量记录(例如:仪表板功能的聚合函数)