Help us learn about your current experience with the documentation. Take the survey.

哈希分区

哈希分区是一种将大型表分割成更小、更易管理的分区的方法,它通过应用哈希函数到指定列(通常是 ID 列)来实现。这种方法对于某些特定用例具有独特优势,但也存在局限性。

要点:

  • 数据分布:行根据其 ID 的哈希值和模余计算分配到各个分区。 例如,如果使用 HASH(ID)MODULUS 64REMAINDER 1 进行分区,那么满足 hash(ID) % 64 == 1 的行将被放入相应的分区。

  • 查询要求:当大多数查询包含 WHERE hashed_column = ? 条件时,哈希分区效果最佳,因为这可以让 PostgreSQL 快速定位到相关的分区。

  • ID 唯一性:这是唯一一种(除了复杂的列表分区外)能够在数据库级别保证跨多个分区 ID 唯一性的分区方法。

前期决策:

  • 必须在创建表前选择分区数量,且之后不易添加。因此,预测未来的数据增长至关重要。

  • 不支持的查询类型: 范围查询 (WHERE id BETWEEN ? AND ?) 和通过其他键的查找 (WHERE other_id = ?) 在哈希分区表上不受直接支持。

注意事项:

  • 选择足够多的分区以适应未来的增长。
  • 确保应用程序查询符合哈希分区的要求。
  • 如果范围查询或其他键的查找是必需的,请考虑使用范围分区或列表分区等替代方案。

总之,哈希分区是特定场景下的有力工具,特别是在跨分区 ID 唯一性至关重要时。然而,在实施前必须仔细考虑其限制和查询模式。