Vermeiden redundanter Vergleichselemente

Vermeiden Sie redundante Vergleichselemente, insbesondere wenn diese über verschiedene Tabellen hinweg auftreten. In einigen Fällen kann das Optimierungsprogramm nicht erkennen, dass die Vergleichselemente redundant sind. Dies kann zu Unterschätzungen von Kardinalitäten führen.

Zum Beispiel wird in SAP-BI-Anwendungen (BI = Business-Intelligence) das Snowflake-Schema mit Fakttabelle und Dimensionstabellen als abfrageoptimierte Datenstruktur genutzt. In einigen Fällen ist eine redundante Zeitmerkmalsspalte ('SID_0CALMONTH' für Monat oder 'SID_0FISCPER' für Jahr) für die Fakttabelle und die Dimensionstabellen definiert.

Der SAP-BI-OLAP-Prozessor (OPAP, Online Analytical Processing) generiert redundante Vergleichselemente für die Zeitmerkmalsspalten der Dimensionstabellen und der Fakttabelle.

Diese redundanten Vergleichselemente können zu längeren Abfrageausführungszeiten führen.

Der folgende Abschnitt zeigt ein Beispiel mit zwei redundanten Vergleichselementen, die in der WHERE-Bedingung einer SAP-BI-Abfrage definiert sind. Es sind identische Vergleichselemente für die Zeitdimensionstabelle (DT) und die Fakttabelle (F) definiert:
     AND (     "DT"."SID_0CALMONTH" = 199605
           AND "F". "SID_0CALMONTH" = 199605
            OR "DT"."SID_0CALMONTH" = 199705
           AND "F". "SID_0CALMONTH" = 199705 )
 AND NOT (     "DT"."SID_0CALMONTH" = 199803
           AND "F". "SID_0CALMONTH" = 199803 )
Das Db2® -Optimierungsprogramm erkennt die Vergleichselemente nicht als identisch und behandelt sie als unabhängig. Dies führt zu Unterschätzungen von Kardinalitäten, nicht optimalen Abfragezugriffsplänen und längeren Abfrageausführungszeiten.

Aus diesem Grund werden die redundanten Vergleichselemente von der für die DB2-Datenbankplattform spezifischen Softwareschicht entfernt.

Diese Vergleichselemente werden auf die folgenden übertragen und es bleiben nur die Vergleichselemente für die Fakttabellenspalte 'SID_0CALMONTH' erhalten:
    AND (     "F". "SID_0CALMONTH" = 199605
           OR "F". "SID_0CALMONTH" = 199705 )
AND NOT (     "F". "SID_0CALMONTH" = 199803 )
Befolgen Sie die Anweisungen in den SAP-Hinweisen (Notes) 957070 und 1144883, um die redundanten Vergleichselemente zu entfernen.