我有一个表,其中包含3个字段(用户名,target_value,score),该字段由用户名(〜400,000)和target_value(〜4000)的全数和外部计算生成的分数,导致总行数约为16亿。
我在此表上的所有查询都将采用]的格式>
SELECT * FROM _table WHERE target_values IN (123, 456)
我的初始版本包括一个关于target_values的BTREE索引,但是我最终花了45分钟时间对该索引进行了BITMAP HEAP SCAN。我也一直在研究BRIN索引,分区和表集群,但是由于将每种方法应用于表需要花费数小时,因此我无法完全蛮力地对每个选项进行性能测试。
在Postgres 10中处理具有非常“块状”数据的单个海量表有什么建议?
我有一个表,其中包含3个字段(用户名,target_value,分数),该字段由用户名(〜400,000)和target_value(〜4000)的全数和计算出的分数在外部生成,从而导致总行数...
如果表是两个数据集的交叉联接,为什么不存储单个表并根据需要计算联接?数据库擅长于此。
根据您的描述,如果您在表上运行CLUSTER
以物理方式按索引顺序对其进行重写,那么我期望性能得到提高。然后,您将不得不访问较少的表块。