更新时间:2023-07-25 GMT+08:00

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。根据拆分键的值在那个范围路由到对应的分片上。

算法计算方式

方式一:拆分键是整型

表1 拆分键是整型时的计算方式

条件

算法

举例

拆分键是整型

分库路由结果 = 根据分库拆分键值在设定的元数据的范围进行路由

分库 :拆分值为3属于3-4=1,则路由到1分片

方式二:拆分键是日期类型

表2 支持的日期函数

日期函数

算法

举例

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

表3 拆分键是日期类型时的计算方式

条件

算法

举例

拆分键是日期类型

分库路由结果 =根据日期函数(分库拆分键值)在设定的元数据的范围进行路由

分库 :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 
};

注意事项

无。