随机使用分析函数设置成组

时间:2018-02-05 07:12:52

标签: sql oracle performance

我正在尝试在单个查询中找到使用分析函数的方法。这是我的问题:

我的数据:根据相似性记录预先组织成SET(如下所示)。

我的目标:我正在尝试将这些集合重新分组,以便尽可能地将来自同一SET的记录放在同一组中。

E.g:

Sample data

什么行之有效:

以下是我的代码,它似乎完全符合我的要求。

/**** First update set wise row num ****/
insert into my_set_stage_1
select text,
       set,
       row_number() over(partition by set order by text) as set_sequence
from my_set;

/**** Next add to group using NTILE ****/
insert into my_set_stage_2
select text,
       set,
       set_sequence,
      ntile(10) over(order by set_sequence) as group_id
from my_set_stage_1 s;

我的问题:

我的实际数据量很大。如您所见,我正在使用2个中间表= 2个大查询。是否可以使用分析函数在单个查询中设置group_id?

任何帮助表示感谢。

1 个答案:

答案 0 :(得分:0)

为什么不在没有插入的情况下执行这些选择?

select s.text,
       s.set,
       s.set_sequence,
      ntile(10) over(order by s.set_sequence) as group_id
from (
    select text,
           set,
           row_number() over(partition by set order by text) as set_sequence
    from my_set
) s
  

“如果查询执行计划成本保持不变或减少。”

解释计划将向您显示执行SELECT语句的成本。它不会向您展示的是将大量数据插入(临时?)表的开销。我们希望减少完整的成本 - 返回结果集的时间 -

显然,对大量数据进行排序并不是一项廉价的工作。此时通常的调整问题适用。多少数据是“高容量”?您可以使用哪些系统资源(内存,CPU)?这是一次性的练习还是反复出现的任务?