2011-01-11 2 views
0

Kann jemand eine Lösung anbieten, um einen unserer Prozesse zu beschleunigen? Wir haben eine Sicht, die für die Berichterstattung verwendet wird, die eine Vereinigung aller 10 Tabellen darstellt. Die Ansicht hat 180 Millionen Zeilen. Wir möchten eine Liste der verschiedenen Werte einzelner Spalten erstellen. Das aktuelle SQL, das vom Berichterstellungstool generiert wird, führt eine Auswahl aus, die sich in der Ansicht unterscheidet, die 10 Minuten dauert. Vorzugsweise würde die Lösung automatisch aktualisiert werden. Wir haben versucht, ein MQT in DB2 UDB V8 als eine Union alle zu erstellen, sofort mit wenig Erfolg aktualisieren. Irgendwelche Vorschläge würden sehr geschätzt werden.Vorschlag erforderlich, um Tabellenscan in Großansicht mit vielen doppelten Werten zu vermeiden

Charles.

+0

können Sie eine materialisierte Ansicht der verschiedenen Liste erstellen? – tster

+0

Die materialisierte Ansicht ist der Oracle-Begriff für eine DB2 Materialized Query Table. Wenn ich versuche, das select distinct auszuführen und sofort zu aktualisieren, erhalte ich folgende Fehlermeldung: "Wenn REFRESH IMMEDIATE angegeben ist, darf der Fullselect nicht enthalten sein: o SELECT DISTINCT" Danke für Ihre Nachfrage. – Charles

Antwort

0

In DB2 8.2 gibt es zahlreiche Einschränkungen für die Aktualisierung von unmittelbaren MQTs, und sie können sich erheblich auf die Anwendungen auswirken, die in die Basistabellen schreiben. Das heißt, Sie können in der Lage sein, eine MQT zu verwenden. Anstatt jedoch mit SELECT DISTINCT, versuchen die etwas Abfrage Look machen wie:

select yourcolumn, count(*) as ignore 
from union_all_view 
group by yourcolumn 

die Säule (yourcolumn) aus muss als NOT NULL definiert werden für diese (in DB2 8.2) zu arbeiten. Das Optimierungsprogramm wählt dieses MQT möglicherweise nicht aus, wenn Sie weiterhin SELECT DISTINCT für die Ansicht "union all" ausgeben. Daher müssen Sie das MQT (oder eine darüber definierte Sicht) möglicherweise direkt abfragen. Ignoriere die Spalte "Ignore" im MQT - das gibt es nur für DB2; Wenn Sie es wirklich nicht sehen wollen, können Sie oben auf dem MQT ein Fenster erstellen.

Dies ist jedoch ein Problem mit der Datenbankgestaltung. Warum müssen Sie 180 Millionen Datenzeilen scannen, um die eindeutigen Werte in einer bestimmten Spalte zu finden? Warum befinden sich diese Werte nicht bereits in einer eigenen Tabelle, wobei Fremdschlüssel aus jeder der 10 Basistabellen definiert sind?

Verwandte Themen