本文將介紹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);