2017-02-04 281 views
0

我有一个任务从特定年份的某些员工的表中获取数据,但查询需要大约两年。 50分钟可以获得5万条记录。Db2查询花费的时间太多

表具有约。 6十亿(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 

我检查了访问计划,并惊讶地看到,无论是分区还是指数习惯。

+1

小心发布计划(来自'db2exfmt')和实际的表和索引DDL? – mustaccio

回答

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)上。

+0

我试过使用't1.year = 2012',但它仍然没有使用分区 – PuneetGupta

+0

@PuneetGupta。 。 。有些东西与分区有关。 'year'可以存储为一个字符串。使用错误的类型可能会混淆优化程序。 –

+0

无法改变年份的数据类型,因为表格已经有600多条记录 – PuneetGupta