分表

阅读(543) 标签: 段界, 分区,

在数据库中,有时,数据会分开存储在多个数据结构完全相同的表中,如分年度存储的销售数据、分部门存储的员工资料、分地区存储的客户信息等等。在数据查询与分析时,往往需要将这些表中的数据联合起来,比如查询历年销售数据、查询所有部门的员工资料或者查询全部客户信息等,此时,可以通过在DQL元数据文件中,设定分表

建立分表,可以直接点击增加分表按钮执行,也可以在菜单栏中选择编辑>增加分表,或者使用快捷键Ctrl+B

选择后,可以选择组成分表的各个物理表来源:

物理表可以在当前数据源的数据库表中选择,也可以在元数据表中选择,选择的物理表必须具有相同的数据结构:

选定分表的数据表来源后,可以为分表命名,字段定义会自动生成:

与元数据中的普通表定义不同,分表中还需定义分区属性,根据指定的分段字段,设定分表中的分段列表。分段字段需是维字段,而且,分表中的各个分区表的分段字段的值需要是严格单调的,这样才可以根据分段字段的设定,在查询时,合理将分表拆分。设定分段列表时,每个物理表作为一个分区,由小到大设定段界,设定段界的值将包含在分区内,如下面的设置:

图中的设定,相当于设定分区订单2011 中,分段字段订单编号<=10554;最后的一个分区订单2012 的段界可以为空白,此时最后一个分区无上限。

在查询时,分表的使用和元数据中其它表的DQL语法相同,比如:

SELECT * FROM订单总表

DQL元数据层会自动将分表中的各个物理表联合访问,相当于执行:

SELECT T1_1.订单编号 订单ID FROM (SELECT * from 订单2011 UNION ALL SELECT * from 订单2012) T1_1

那么,分表中,分区的设定有什么意义呢?在执行有条件的查询时,有时候查询的数据并非来源于分表中所有的物理表,此时如果筛选条件是分段字段,在DQL元数据文件中就可以根据分段列表中的段界设定,寻找到数据来源于哪个或者哪些物理表,从数据查询时只访问相关的数据库。

如:SELECT * FROM 订单总表 WHERE 订单编号<10250

DQL会解析为:SELECT T1_1.订单ID 订单ID FROM (SELECT * from 订单2011) T1_1 WHERE T1_1.订单ID<10250

如:SELECT * FROM 订单总表 WHERE 订单ID in (10620,10630,10640)

DQL会解析为:SELECT T1_1.订单编号 订单ID FROM (SELECT * from 订单2012) T1_1 WHERE T1_1.订单ID IN (10620,10630,10640)