oracle数据量巨大表查询时间太长,sqlplus有的不能spool出结果

sql如下:
SELECT Count(DISTINCT n),
d
FROM A
WHERE d BETWEEN '20141106' AND '20150405'
GROUP BY d
ORDER BY d;

表A,有三行索引,第一行字段日期d、编号n、单位号I,第二行索引为编号n、单位号I,第三行为日期d、编号n,有分区表,按照每月分区。
因数据量太大(每日表新增数据2.5千万笔,查5个月数据数据量达37.5亿),所以用sqlplus写好定时计划在后台跑并spool出文件,隔一天后发现5个脚本都跑完了,sql经过确认也执行完了,但只导出了2个文件(这个5个脚本结构是一样的,只是具体@到的sql文件和导出文件不一样,并且应该查处的结果均不到500行数据),经查相关资料,有人说是若查询的数据量过于巨大,可能会出不来数据,有的建议指定分区partition查询,但也有的说oracle本身会智能根据where后面的条件查询对应的分区、所以不用特意指定分区。

现在,问题如下:
1、数据量过于巨大的话,是否真的会出不来数据?如果是真的,那么多少条数据或多少G的数据量以上出不来?
2、此表若单独增加一行索引d,只有这一个字段,那么查询的时候速度会不会提上来?
3、现有的三行索引都是多个字段,那么必须同时使用同一行的所有字段才可以算做索引吗?如果不是,如引用第一行的d字段和三个字段都引用有什么区别?
4、想要指定分区partition查询,但也有的人说oracle本身会只能根据where后面的条件查询对应的分区、所以不用特意指定分区,是这样吗?另外,如果是真的,不指定分区表,where 后面日期范围 '20141106' AND '20150405'因不是20141101到20150430,oracle会智能判断出只查14年11月到15年4月这5个分区表吗?
5、想要根据d字段条件查这30多亿数据,有什么好的建议或意见吗?请列出相关sql。谢谢

第1个回答  2015-08-08
你的目的是要查询出这三十多亿条数据,并且都导出来;还是在这三十多亿条数据里面快速找出需要的几条数据;如果是前者的话,那就没有捷径可走,只能用分批导出的笨办法了;追问

题干已经写了,“这个5个脚本结构是一样的,只是具体@到的sql文件和导出文件不一样,并且应该查处的结果均不到500行数据”,所以不是你回复的前者,前者exp导出即可。