Range算法
适用场景
适用于范围类操作较多的场景。在SQL查询条件中,使用“>”、“<”、“BETWEEN ... AND ...”之类运算符相对较多。
使用说明
拆分键的类型只支持整型类型、日期类型和日期函数结合,如果使用日期函数,拆分键的数据类型必须是date、datetime、timestamp其一。
路由方式
根据拆分键,按照算法元数据的规则将数据行存储到相应的分片上。
建表时要设定元数据,假如逻辑库分8个分片,则元数据可以设定的范围为:1-2=0,3-4=1,5-6=2,7-8=3,9-10=4,11-12=5,13-14=6,default=7。根据拆分键的值在某个范围路由到对应的分片上。
算法计算方式
方式一:拆分键是整型
| 条件 | 算法 | 举例 |
|---|---|---|
| 拆分键是整型 | 分库路由结果 = 根据分库拆分键值在设定的元数据的范围进行路由 | 分库 :拆分值为3属于3-4=1,则路由到1分片 |
方式二:拆分键是日期类型
| 日期函数 | 算法 | 举例 |
|---|---|---|
| year() | year(yyyy-MM-dd)=yyyy | year('2019-10-11')=2019 |
| month() | month(yyyy-MM-dd)=MM | month('2019-10-11')=10 |
| weekofyear() | weekofyear(yyyy-MM-dd)=该日期是今年的第几周 说明: 关于一年中的第几周的定义请参见WEEKOFYEAR(date)。 | weekofyear('2019-10-11')=41 |
| day() | day(yyyy-MM-dd)=该日期是月份的第几天 | day('2019-10-11')=11 |
| 条件 | 算法 | 举例 |
|---|---|---|
| 拆分键是日期类型 | 分库路由结果 =根据日期函数(分库拆分键值)在设定的元数据的范围进行路由 | 分库 :month('2019-10-11')=10属于9-10=4,则路由到4分片 |
建表语法
create table range_tb(
id int,
name varchar(30) DEFAULT NULL,
create_time datetime DEFAULT NULL,
primary key(id)
)
dbpartition by range(id)
{
1-2=0,
3-4=1,
5-6=2,
7-8=3,
9-10=4,
11-12=5,
13-14=6,
default=7
}; 注意事项
无。