DB2 - Problembeschreibung
Problem IC70922 | Status: Geschlossen |
A RANGE JOIN PREDICATE JOINED TO A UNION ALL VIEW WITH A GROUP B Y CLAUSE MAY PRODUCE A SUB-OPTIMAL PLAN. | |
Produkt: | |
DB2 FOR LUW / DB2FORLUW / 970 - DB2 | |
Problembeschreibung: | |
Db2 may not push down a range join to a Union All view into the tables of the Union All view.This would prevent Db2 to produce a sub-optimal plan. . The following conditions must be met in order to hit this proble m: . 1) There is a Group By clause on the table and the Union All view of the range join predicate. 2) Any column from the table in the range join predicate derives from an expression that is not a column. . For example: . create table br1(tranid integer, trandate date, amount decimal); create table br2(tranid integer, trandate date, amount decimal); create view ua as (select * from br1 union all select * from br2); . create table datedim(durid integer, startdate date, enddate date); . create view vdatedim(durid, startdate, enddate) as (select durid, case when month(startdate) = 3 then startdate + 1 day else startdate end startdate, enddate from datedim ); . select ua.trandate, count(tranid), sum(amount) from ua, vdatedim where ua.trandate between vdatedim.startdate and vdatedim.enddate group by ua.trandate ; . | |
Problem-Zusammenfassung: | |
Db2 may not push down a range join to a Union All view into the tables of the Union All view.This would prevent Db2 to produce a sub-optimal plan. . The following conditions must be met in order to hit this proble m: . 1) There is a Group By clause on the table and the Union All view of the range join predicate. 2) Any column from the table in the range join predicate derives from an expression that is not a column. . For example: . create table br1(tranid integer, trandate date, amount decimal); create table br2(tranid integer, trandate date, amount decimal); create view ua as (select * from br1 union all select * from br2); . create table datedim(durid integer, startdate date, enddate date); . create view vdatedim(durid, startdate, enddate) as (select durid, case when month(startdate) = 3 then startdate + 1 day else startdate end startdate, enddate from datedim ); . select ua.trandate, count(tranid), sum(amount) from ua, vdatedim where ua.trandate between vdatedim.startdate and vdatedim.enddate group by ua.trandate ; . | |
Local-Fix: | |
verfügbare FixPacks: | |
DB2 Version 9.7 Fix Pack 4 for Linux, UNIX, and Windows | |
Lösung | |
fixed >= v97 fpk4 | |
Workaround | |
keiner bekannt / siehe Local-Fix | |
Weitere Daten | |
Datum - Problem gemeldet : Datum - Problem geschlossen : Datum - der letzten Änderung: | 02.09.2010 29.04.2011 29.04.2011 |
Problem behoben ab folgender Versionen (IBM BugInfos) | |
9.7.FPk4 | |
Problem behoben lt. FixList in der Version | |
9.7.0.4 |