Ich habe Anfragen zu gespeicherten Prozeduren migrieren, und ich bekomme TAF (Tabellenzugriff Full), I-Index für eine bessere Leistung schaffen will, muss ich weiter:Index erstellen, um die Kosten in der Datenbank zu reduzieren?
CREATE INDEX MY_INDEX2 ON OWNER.TABLE_NAME(FIELD);
Und ich bekomme nächste:
INDEX_NAME UNIQUE LOGGING DEGREE COLUM_NAME ORDER POSITION INDEX_OWNER
MY_INDEX Y NO 1 MY_FIELD Asc 1 MY_OWNER
MY_INDEX2 N YES 1 MY_FIELD1 Asc 1 MY_OWNER
Irgendwelche Know-how-Position von MY_INDEX2 zu 2 ändern?
Und wie besser mein MY_INDEX2? Fügen Sie beispielsweise eine andere Reihenfolge hinzu und verwenden Sie den Bitmap-Index.
Und irgendwelche erklären mir, was Grad bedeuten?
Danke!
Sie erkennen, dass ein Index bedeutet nicht unbedingt Table Access Full wird in allen Abfragen vermieden werden, nicht wahr? Wenn eine Abfrage eine große Anzahl von Zeilen verarbeiten muss (z. B. mehr als 70% aller Zeilen in einer Tabelle), ist es effizienter, alle Zeilen abzurufen und diejenigen zu ignorieren, die nicht benötigt werden, als sie zu verwenden sind ein Index für den Zugriff. Stellen Sie sicher, dass Sie keine unnötigen Indizes hinzufügen, da sie Kosten haben, sie haben nicht nur Vorteile. – mathguy
Um auf @ Mathmuys Antwort zu erweitern; Alles dreht sich um COST. Der Optimierer wird verschiedene Ausführungspläne bewerten und den mit den niedrigsten Kosten auswählen. Woher bekommt es die Kosten? Statistiken!. Also, holen Sie sich einen Ausführungsplan für Ihre Anfrage und sehen Sie, was der Optimierer denkt. Tun Sie dies: Ändern Sie den Sitzungssatz statistics_level = ALL; Führen Sie dann Ihre Abfrage aus. Dann holen Sie sich die Ausgabe von select * aus der Tabelle (dbms_xplan.display_cursor (null, null, 'ALLSTATS LAST')) – BobC