Frage

Was ist der Unterschied zwischen Access und Filter Prädikaten in Oracle-Ausführungsplan? Wenn ich richtig verstehe, „access“ wird verwendet, um festzustellen, welche Datenblöcke gelesen werden müssen, und „Filter“ aufgebracht wird, nachdem die Blöcke gelesen werden. Daher Filterung ist „böse“.

Im Beispiel des Prädikat Informationen Abschnitts des Ausführungsplanes unter:

10 - access("DOMAIN_CODE"='BLCOLLSTS' AND "CURRENT_VERSION_IND"='Y')
     filter("CURRENT_VERSION_IND"='Y')

Warum "CURRENT_VERSION_IND" in beiden Zugriffs- und Filterabschnitten wiederholt?

Die entsprechende Operation ist Indexbereich auf Index-Scan, der auf Feldern (DOMAIN_CODE, CODE_VALUE, CURRENT_VERSION_IND, DECODE_DISPLAY) definiert ist.

Meine Vermutung ist, dass, weil CURRENT_VERSION_IND nicht die zweite Spalte in dem Index ist, Oracle es nicht während der Zugangsstufe verwenden kann. Somit greift sie auf Index durch DOMAIN_CODE Spalte, holt alle Blöcke, und filtert sie dann durch CURRENT_VERSION_IND. Habe ich Recht?

War es hilfreich?

Lösung

Nein, gibt die Zugriffs Prädikate in diesem Beispiel, dass der Index sowohl DOMAIN_CODE und CURRENT_VERSION_IND überquert wird.

Ich würde nicht über die Filterprädikat Sorge, die überflüssig zu sein scheint - es scheint eine Marotte zu seinen Plan zu erklären, wahrscheinlich etwas mit der Tatsache zu tun, dass es eine Art von Skip-Scan auf dem Index zu tun hat ( es hat eine Entfernungsabtastung in der ersten Spalte, dann ein Sprung über CODE_VALUE abtasten, für jegliche passende CURRENT_VERSION_INDs Suche).

Ob Sie den Index ändern oder einen anderen Index erstellen ist eine ganz andere Sache.

Auch nur eine geringfügige Missverständnisse korrigieren: die Blöcke aus dem Index abgerufen werden müssen, bevor sie irgendetwas tun können, ob die „access“ oder „Filter“ Schritte ausgeführt werden. Wenn Sie beziehen sich Blöcke aus der Tabelle zu holen, dann ist auch die Antwort nein - Sie sagte der Filterprädikat „10“ auf dem Indexzugriff war, nicht auf einem Tisch Zugang; und wie auch immer, es gibt keinen Grund Oracle kann den Filter nicht auf CURRENT_VERSION_IND auf dem Index bewerten -. es nicht auf den Tisch braucht überhaupt zugreifen zu können, es sei denn es andere Spalten muss nicht in den Index aufgenommen

Andere Tipps

Ich glaube, Sie in Ihrer Einschätzung richtig sind, was Oracle tut, aber falsch zu sagen, dass der Filterschritt (oder jede andere Optimierer Wahl) ist immer „böse“. Es macht keinen Sinn machen Index absolut jede mögliche Kombination von Spalten, die auf abgefragt werden können, so Filterung wird häufig erforderlich.

Wenn jedoch in diesem Fall CURRENT_VERSION_IND als die zweite Spalte der Index-Performance-Zugabe deutlich verbessert auf häufig Abfragen ausführen und schadet nicht die Leistung anderer Abfragen, dann kann es Sinn machen, zu tun so.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top