2017-02-04 215 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