Announcement

Collapse
No announcement yet.

Abfrage optimieren bei "or"

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Abfrage optimieren bei "or"

    Hallo zusammen,

    ich habe Tabelle "A" mit den Feldern "Art,Jahr,Monat,Betrag" und dem eindeutigen Index IDX_A1 "Art,Jahr,Monat"

    Ich versuche eine schnelle Abfrage zu generieren, welche die Summe von Betrag in einem bestimmten Monat ergibt, wobei ein oder mehrere Arten ausgewählt sind.

    Mein Problem ist eine Abfrage mit mehreren Werten für "Art"

    z.B.: select sum(betrag) from A where art in (:a1,:a2,:a3) and jahr =:JA and monat =:MO
    oder select sum(betrag) from A where (art =:a1 or art=:a2 or art=:a3) and jahr =:JA and monat =:MO

    Jetzt wird zwar der Index benutzt, aber gleich 3 mal (PLAN (A INDEX (IDX_A1,IDX_A1,IDX_A1)) und das ist deutlich langsamer als wenn ich die Abfrage auf 3x starten würde und später zusammenrechne.

    Ein zweiter Index auf die Felder "Jahr,Monat" kann nicht benutzt werden "index IDX_A2 cannot be used in the specified plan"??? Warum?

    Die Tabelle enthält im Moment 200.000 Sätze. Bei der Nutzung von einer Einschränkung auf "Art" bekomme ich 300 indexed Reads. Bei 3 Einschränkungen auf "Art" sind es aber dann 128.000 indexed Reads und somit deutlich langsamer.

    Im Einsatz ist V8.1.0.

    Hat Einer einen Tipp für mich, denn die Tabelle wird jeden Monat größer und die Abfrage damit noch langsamer.
Working...
X