Sql 在Unix shell中分组数据或在Oracle中分组方式
按多列数据分组的最佳和最优化的方法是什么 需要执行操作的数据是400 x 1000万行或行。 我乘以了10,因为我们有10个分区或10个文件,每个分区或文件大约有400m行 问题: 从oracle获取列后,临时表中有10列 在获取的数据上,我需要按一些列进行分组,并添加一些列的总和 选项: 我可以通过在同一查询中使用GROUPBY子句而不是 而不是创建临时表:下面我也得到了参考快照 古老的 我在临时表中获取数据,并确保表分区正确 是这样的,组由变得很快。 我在一个文件中获取数据,并使用awk或 unix/perl命令。 查询:Sql 在Unix shell中分组数据或在Oracle中分组方式,sql,oracle,shell,unix,Sql,Oracle,Shell,Unix,按多列数据分组的最佳和最优化的方法是什么 需要执行操作的数据是400 x 1000万行或行。 我乘以了10,因为我们有10个分区或10个文件,每个分区或文件大约有400m行 问题: 从oracle获取列后,临时表中有10列 在获取的数据上,我需要按一些列进行分组,并添加一些列的总和 选项: 我可以通过在同一查询中使用GROUPBY子句而不是 而不是创建临时表:下面我也得到了参考快照 古老的 我在临时表中获取数据,并确保表分区正确 是这样的,组由变得很快。 我在一个文件中获取数据,并使用awk或
select /*+ parallel (a,10) */
customer_type, customer_sub_type, charge_code, cycle,month,
sum(amount),sum(final_amount)
from htg_customer_data a
where cycle=1
and month=1
and sys_creation_date < to_date('20140131235959', yyyymmddhh24miss)
group by customer_type, customer_sub_type, charge_code, cycle, month
表是按周期和月份划分的,它有10个分区。每行4亿行。以上使用的字段都没有索引。摘录中不需要索引列。您没有提供完整的信息 通常,在数据库中执行操作比将数据移动到另一个环境要快。这有几个原因: 数据库服务器通常比应用服务器更强大。 数据库引擎可以利用网格计算多处理器、多磁盘 数据库引擎可以智能地优化查询 数据库引擎可以实现比排序和循环更好的聚合技术 所有这些都适用于Oracle,它拥有复杂的算法和良好的优化器 我会立即排除第3条,因为将如此大量的数据移出数据库将是一个漫长的过程。然后你必须处理一个非常大的文件来做你真正想做的事情
很可能,1是最好的方法。在某些情况下,临时表可能会提供额外的性能提升。请告诉我您需要什么样的信息?是关于硬件配置和oracle版本的。@Kimi。您在数据库中考虑的查询是什么?什么是表结构,包括索引和分区?@Kimi。数据库中的聚合应该很好。Oracle应该足够聪明,可以分别为每个分区执行此操作,因为分区键位于group by子句中。使用/*+MATERIALIZE*/是否有助于将上述查询固定下来?@Kimi。您的查询没有子查询,所以我看不出该提示有多重要。