Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Wann man Hinweise in Oracle-Abfragen verwendet

Die meisten Hinweise sind eine Möglichkeit, dem Optimierer unsere Absicht mitzuteilen. Zum Beispiel der leading Hinweis, den Sie erwähnen, bedeutet Tabellen in dieser Reihenfolge beitreten . Warum ist das notwendig? Oft liegt es daran, dass die optimale Join-Reihenfolge nicht offensichtlich ist, weil die Abfrage schlecht geschrieben ist oder die Datenbankstatistiken ungenau sind.

Also eine Verwendung von Hinweisen wie leading ist, den besten Ausführungspfad herauszufinden und dann herauszufinden, warum die Datenbank diesen Plan nicht ohne den Hinweis wählt. Löst das Sammeln neuer Statistiken das Problem? Löst das Umschreiben der FROM-Klausel das Problem? Wenn dies der Fall ist, können wir die Hinweise entfernen und das nackte SQL bereitstellen.

Manchmal gibt es Zeiten, in denen wir dieses Rätsel nicht lösen können und die Hinweise in der Produktion behalten müssen. Dies sollte jedoch eine seltene Ausnahme sein. Bei Oracle arbeiten seit vielen Jahren viele sehr clevere Leute am Cost-Based Optimizer, daher sind seine Entscheidungen normalerweise besser als unsere.

Aber es gibt noch andere Hinweise, die wir in der Produktion nicht missachten würden. append ist oft entscheidend für das Tuning von Bulk-Inserts. driving_site kann beim Optimieren verteilter Abfragen von entscheidender Bedeutung sein.

Umgekehrt werden andere Hinweise fast immer missbraucht. Ja parallel , Ich rede über dich. Blindes Setzen von /*+ parallel (t23, 16) */ wird Ihre Abfrage wahrscheinlich nicht sechzehn Mal schneller machen und nicht selten langsamer werden Abruf als eine Singlethread-Ausführung.

Kurz gesagt, es gibt keinen allgemeingültigen Rat, wann wir Hinweise verwenden sollten. Die wichtigsten Dinge sind:

  1. verstehen, wie die Datenbank funktioniert und insbesondere wie der kostenbasierte Optimierer funktioniert;
  2. verstehen, was jeder Hinweis bewirkt;
  3. Testen Sie angedeutete Abfragen in einer geeigneten Optimierungsumgebung mit produktionsäquivalenten Daten.

Offensichtlich ist der beste Ausgangspunkt die Oracle-Dokumentation . Wenn Sie jedoch etwas Geld ausgeben möchten, finden Sie in Jonathan Lewis' Buch über den kostenbasierten Optimierer ist die beste Investition, die Sie tätigen können.