2017-02-04 6 views
0

Ich habe eine Aufgabe, um die Daten aus der Tabelle für einige der Mitarbeiter für bestimmte Jahre zu holen, aber die Abfrage dauert ca. 50 Minuten, um 50 000 EMP-Datensätze abzurufen.Db2 Abfrage dauert zu viel Zeit

Tabelle hat ca. 6000000000 (6 * 10^9) Daten

Abfrage:

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 

ich den Zugriffsplan und überrascht überprüft, um zu sehen, dass weder Partition noch Index Gewöhnung.

+1

Möchten Sie den Plan (aus 'db2exfmt') und die tatsächliche Tabelle und Index DDL? – mustaccio

Antwort

0

Zuerst versuchen, diese Abfrage:

select a, b 
from t1 
where t1.year = 2012 and 
     t1.name in (select name from name_tab fetch first 50000 rows only) 

Ist es die Partition erkennen? Ist dies der Fall, versuchen Sie die Abfrage wie das Schreiben:

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) 

Sie möchten vielleicht eine order by in der Unterabfrage setzen, so werden die Namen garantiert gleich sein.

Dann setzen Sie einen Index auf name_tab(name).

+0

Ich habe versucht, die 't1.year = 2012 ', aber es immer noch nicht mit der Partition – PuneetGupta

+0

@PuneetGupta. . . Mit der Partitionierung ist etwas passiert. Könnte 'year' als String gespeichert werden. Die Verwendung der falschen Typen kann den Optimierer verwirren. –

+0

kann den Datentyp des Jahres nicht ändern, da die Tabelle bereits ~ 600 crores Datensätze enthält – PuneetGupta