Oracle中一个表数据大概有一亿条,现在需要进行数据按照三个字段进行分组查询数据统计,如何查询较快
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle中一个表数据大概有一亿条,现在需要进行数据按照三个字段进行分组查询数据统计,如何查询较快相关的知识,希望对你有一定的参考价值。
参考技术A select sum(count)total1,字段1 from(select count(*) count,字段1,字段2,字段3 from table group by 字段1,字段2,字段3 order by count)t group by t.字段1select sum(count)total2,字段2 from(select count(*) count,字段1,字段2,字段3 from table group by 字段1,字段2,字段3 order by count)t group by t.字段2
select sum(count)total3,字段3 from(select count(*) count,字段1,字段2,字段3 from table group by 字段1,字段2,字段3 order by count)t group by t.字段3 参考技术B 如果有索引的话,尽量使用索引。
数据量太多,另外查询结果集有多大?追问
统计完后数据大概100万…但是因为查询条件复杂…不能预先存储…添加索引我看了他的解释计划~执行了索引但是仍然很慢
追答数据量太大,慢是肯定的。可以考虑分区之类的。
本回答被提问者采纳如何在十分钟内插入1亿条记录到Oracle数据库?
这里提供一种方法,使用 APPEND 提示,使得十分钟内插入上亿数据成为可能。
-- Create table
create table TMP_TEST_CHAS_LEE
(
f01 VARCHAR2(20),
f02 NUMBER(10) not null,
f03 VARCHAR2(21),
f04 VARCHAR2(21),
f05 NUMBER,
f06 NUMBER(20)
);
--创建一个临时表,用于提供序列号
CREATE GLOBAL TEMPORARY table t_sequence_num(
sequenceNum number(8) not null
)
ON COMMIT PRESERVE ROWS;
--开始插入数据
begin
--先生成1万个序号
delete from t_sequence_num;
for i in 0..9999 loop
insert into t_sequence_num(sequenceNum) values(i);
end loop;
--使用APPEND提示,每次1万条,进行数据插入
for i in 1..10 loop
insert /*+ append */ into TMP_TEST_CHAS_LEE
(f01, f02, f03, f04, f05, f06)
select
8613800000000 + i * 10000 + t_sequence_num.sequencenum as MSISDN,
‘12106000‘,
0,
‘20120312072000‘,
‘500231891000‘,
null
from t_sequence_num;
--每批次必须要提交一次
commit;
end loop;
end;
/
4. APPEND方式插入数据后,必须要提交后才能对表进行其它操作
以上是关于Oracle中一个表数据大概有一亿条,现在需要进行数据按照三个字段进行分组查询数据统计,如何查询较快的主要内容,如果未能解决你的问题,请参考以下文章
oracle中有一亿多行数据的表,要全表更新某字段值,有啥号的方法?