全部产品
Search
文档中心

RIGHT_SHIFT

更新时间: 2020-08-17

使用要求

  • 拆分键的类型必须整数类型。
  • DRDS实例的版本必须是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位的值作为哈希值,则可以如下建表:

  1. create table test_hash_tb (
  2. id int,
  3. name varchar(30) DEFAULT NULL,
  4. create_time datetime DEFAULT NULL,
  5. primary key(id)
  6. ) ENGINE=InnoDB DEFAULT CHARSET=utf8
  7. dbpartition by RIGHT_SHIFT(id, 8)
  8. tbpartition by RIGHT_SHIFT(id, 8) tbpartitions 4;

注意事项

移位的数目不能超过整数类型所占有的位数目。