本文將介紹RIGHT_SHIFT函數的使用方式。
使用限制
- 拆分鍵的類型必須整數類型。
- PolarDB-X 1.0執行個體的版本需為5.1.28-1320920或以上版本,。
路由方式
根據分庫鍵的索引值(索引值必須是整數)有符號地向右移二進位指定的位元(位元可通過DDL指定),然後將得到的整數值按分庫(表)數目取餘。
說明 移位的數目不能超過整數類型所佔有的位元目。
使用情境
當拆分鍵的大部分的索引值的低位部分區分度比較低而高位部分區分度比較高時,則適用於通過此拆分函數提高散列結果的均勻度。
例如有4個拆分鍵的索引值,分別為0x0100、0x0200、0x0300和 0x0400, 這4個值的第8位部分都是0。通常一些業務後N位可能只是一些業務上的標誌位,如果直接對面值進行取餘散列,其散列效果可能會比較差。但如果通過RIGHT_SHIFT(shardKey, 8)將拆分鍵的值進行二進位右移8位,則分別變成了0x01、0x02、0x03和0x04,這樣的散列效果就會比較均勻(若分4個庫,剛好可以每個值對應一個分庫)。
使用樣本
假設需要將ID作為拆分鍵,並將ID的值向右移二進位4位的值作為雜湊值,則可以如下建表:
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 RIGHT_SHIFT(id, 8)
tbpartition by RIGHT_SHIFT(id, 8) tbpartitions 4;