【发布时间】:2018-09-25 02:12:49
【问题描述】:
我有一个大小为 100k 行的大表,主键的数据类型为 NUMBER。此列中填充数据的方式是使用随机数生成器。
所以我的问题是,是否有可能有一个 SQL 查询来帮助我用值范围均匀地对表进行分区。例如:如果我的列值是这样的:
1
2
3
4
5
6
7
8
9
10
我希望将其分成三个分区,然后我希望得到这样的输出:
Range 1 1-3
Range 2 4-7
Range 3 8-10
【问题讨论】:
-
您的意思是物理上将表重建为分区表,还是只需要一个将返回三组数据的查询?如果您只需要三分之一的数据,
mod(your_pk_column,3)将返回 0、1 或 2。 -
@WilliamRobertson:我不想将我的表重建为分区,但我知道我应该如何根据我选择破坏表的分区数来定义一个范围。我的意思是,如果我的表有 100 条记录并且我想将它分成 5 个分区,我知道每个分区都会有 20 条记录,但我真的很想根据特定分区的列数据获取确切的起点和终点。
-
组内的 PK 值是连续的是否重要,因为这些值是随机分配的?例如,
mod(id,3)将给出三个分组:{3,6,9}、{1,4,7,10}、{2,5,8}。会这样吗,还是必须是{1,2,3}、{4,5,6}等?