
# 哈希分区
哈希分区（Hash Partition）是依据GaussDB内置的哈希算法，对分区键进行运算，从而实现数据到各分区的映射。在分区键取值范围不倾斜（no data skew）的场景下，哈希算法能够让数据行在各个分区之间均匀分布，进而使得各分区的大小大致保持一致，是实现分区间数据均匀分布的理想方法。哈希分区也是范围分区的一种易于使用的替代方法，尤其是当待分区的数据并非历史数据，或者没有明显可用于分区的分区键时。示例如下：
```
gaussdb=# CREATE TABLE bmsql_order_line (
    ol_w_id          INTEGER   NOT NULL,
    ol_d_id          INTEGER   NOT NULL,
    ol_o_id          INTEGER   NOT NULL,
    ol_number        INTEGER   NOT NULL,
    ol_i_id          INTEGER   NOT NULL,
    ol_delivery_d    TIMESTAMP,
    ol_amount        DECIMAL(6,2),
    ol_supply_w_id   INTEGER,
    ol_quantity      INTEGER,
    ol_dist_info     CHAR(24)
)
--预先定义100个分区。
PARTITION BY HASH(ol_d_id)
(
    PARTITION p0,
    PARTITION p1,
    PARTITION p2,
    …
    PARTITION p99
);
--删除表。
gaussdb=# DROP TABLE bmsql_order_line;
```
上述例子中，使用bmsql_order_line表的ol_d_id列作为依据进行了分区，ol_d_id列是identifier性质的属性列，其本身既不具备时间维度的特征，也无法在某一特定维度上对数据做出区分。在这种情况下，采用哈希分区策略来对该表进行分表处理无疑是一个相当理想的选择。
相比其他分区类型，哈希分区除了需要提前确认分区键不存在严重的数据倾斜问题（即某一个或某几个值出现极高的重复频率）之外，用户仅需指定分区键以及分区数量，便能够完成分区的创建工作。而且，哈希分区能够切实保证每个分区内的数据实现均匀分布，在很大程度上提升了分区表的易用性。
