全部產品
Search
文件中心

PolarDB:HASH

更新時間:Jul 06, 2024

本文將介紹HASH函數使用方式。

描述

  • 若分庫和分表使用不同拆分鍵進行HASH時,則根據分庫鍵的索引值直接按分庫數取餘。如果索引值是字串,則字串會先被換算成雜湊值再進行路由計算。

    例如HASH(8)等價於8%D(D是分庫數目), 而HASH("ABC")等價於hashcode("ABC").abs()%D(D是分庫數目)。

  • 若分庫和分表都使用同一個拆分鍵進行HASH時,則根據拆分鍵的索引值按總的分表數取餘。

    例如有2個分庫,每個分庫4張分表,那麼0庫上儲存分表0~3,1庫上儲存分表4~7。某個索引值為15,那麼根據該路由方式,則該索引值15將被分到1庫的表7上((15 % (2 * 4) =7))。

注意事項

HASH函數要求拆分列的值的自身分布均衡才能保證雜湊均衡。

使用限制

  • 拆分鍵的資料類型必須是整數類型或字串類型。
  • 字串類型的拆分鍵路由時區分大小寫。

使用情境

HASH函數主要適用於如下情境:
  • 需要按使用者ID或訂單ID進行分庫的情境;
  • 拆分鍵是字串類型的情境。
樣本

假設需要對ID列按HASH函數進行分庫不分表,則您可以使用如下DDL語句進行建表:

create table test_hash_tb (
    id int,
    name varchar(30) DEFAULT NULL,  
    create_time datetime DEFAULT NULL,
    primary key(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 dbpartition by HASH(ID);