我有一项任务是从特定年份的某些员工那里获取表中的数据,但查询大约需要。 50分钟可获得5万张军事记录。
表约有。 60亿(6 * 10 ^ 9)数据
查询:
select a, b
from t1
where t1.year in (2012,2013) and
t1.name in (select name from name_tab fetch first 50000 rows only)
Partitioned table: t1
partitioned col: t1.year
Index col: t1.name
我检查了Access计划,并惊讶地发现分区和索引都没有被使用。
答案 0 :(得分:0)
首先,尝试此查询:
select a, b
from t1
where t1.year = 2012 and
t1.name in (select name from name_tab fetch first 50000 rows only)
它识别分区吗?如果是,请尝试将查询编写为:
select a, b
from t1
where t1.year = 2012 and
t1.name in (select name from name_tab fetch first 50000 rows only)
union all
select a, b
from t1
where t1.year = 2013 and
t1.name in (select name from name_tab fetch first 50000 rows only)
您可能希望在子查询中放置order by
,因此保证名称相同。
然后,在name_tab(name)
上添加一个索引。