是否有可能在Greenplum中的同一段上并置相似数据?

时间:2018-01-25 18:21:20

标签: postgresql performance greenplum hawq

假设我的系统中有12个段,那么假设我创建了一个表,我根据一年中的月份按列分配。现在假设我有第二个表,我也使用该表,只使用带有DISTRIBUTED BY (month)的create语句,然后我在月份和其他属性上加入这两个表。

在高度具体的上述场景中,通过选择月份作为分发列,是否提高了月份查询的性能? 10月份来自两个表的记录是否会自动地出现在同一段中,或者是否可以指定这些记录将被分配到的段以便它们在同一段上并置?如果它们是并且可以并置,那么无论如何都会有任何性能优势吗?

1 个答案:

答案 0 :(得分:1)

是的,如果数据并置,查询性能会更好,因为数据移动会更少。并置意味着来自两个或更多个表的分配密钥是相同的数据类型。

但选择分配密钥非常重要。如果您选择月份并且有12个月的数据,则表示您的表格仅使用12个段。这不是一个好的分配密钥。所以不要用月!

您应该选择分配密钥的逻辑主键,以便在各个分段中获得最佳分配。具有事务的表可能具有标识每个事务的transaction_id列。这是理想的分发栏。

您希望使用与逻辑主键不同的分发键的示例可能是两个不同的日志表,它们都具有唯一但不同的log_id。但是这两个表可能有其他属性,如product_id,customer_id和transaction_id,这就是你加入这两个表的方法。您可能希望通过这三列分发这两个表,以便数据将并置,并且连接这两个表的查询将比未并置数据时执行更好。

确保在执行此操作时没有数据偏差,因为这会破坏使事情更快的意图。祝你好运!