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