描述
根據分庫鍵的鍵值(鍵值必須是整數)有符号地向右移二進制指定的位數(位數可通過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;