2 Stimmen

Hinweise in Sql Server

Sind Hinweise wirklich für jede Sql-Anweisung erforderlich? Wir haben einen Datenbankadministrator, der sehr pingelig ist und uns bittet, für jede Select- und Update-Anweisung in unseren gespeicherten Prozessen Hinweise zu setzen. Ist das wirklich notwendig?

9voto

Ed Guiness Punkte 33920

Normalerweise nicht. Sie überall anzubringen, klingt nach Overkill.

Le site Dokumentation sagt

Da der SQL Server-Abfrageoptimierer normalerweise den besten Ausführungsplan für eine Abfrage auswählt, empfehlen wir, join_hint, query_hint und table_hint nur als letzten Ausweg von erfahrenen Entwicklern und Datenbankadministratoren zu verwenden

7voto

Galwegian Punkte 40819

Ihr DBA ist falsch .

Desde MS :

Da der SQL Server-Abfrageoptimierer normalerweise den besten Ausführungsplan Plan für eine Abfrage auswählt, empfehlen wir, dass Verknüpfungshinweis , Abfragehinweis und Tabellenhinweis nur als letztes Mittel verwendet werden von erfahrenen Entwicklern und Datenbankadministratoren.

1voto

Ned Batchelder Punkte 342778

Hinweise sind lediglich Andeutungen. Sie helfen dem Optimierer, die bestmögliche Arbeit zu leisten. Aber wie bei jeder Optimierung sollten Sie sich auf die Aussagen konzentrieren, die tatsächlich Probleme darstellen.

1voto

Joel Coehoorn Punkte 377088

Normalerweise ist das einfach rückwärts gerichtet. Je nach Ihrer Situation kann es jedoch wünschenswert sein.

Wir haben zum Beispiel eine Datenbank (eigentlich eine Reihe von Datenbanken auf einem Server), deren Daten alle ein nächtlicher Snapshot-Dump eines Mainframe-Systems sind, der für Berichte und andere Zwecke verwendet wird. Abgesehen von dem Batch-Prozess, der die Datenbanken jede Nacht neu erstellt, nichts auf dieses System zu schreiben. In diesem Zusammenhang ist das Standardsperrschema nicht angemessen, und die Politik zwischen unserer Gruppe und der IT-Gruppe, die alle unsere Server verwaltet, hindert uns daran, es zu ändern. Also: So gut wie alle Abfragen an diese Datenbanken haben die with (nolock) Hinweise.

Ich kann mir vorstellen, dass es andere Situationen gibt, in denen Sie Berichtsdatenbanken haben, auf die nicht geschrieben wird, oder vielleicht das Gegenteil: eine Archivierungs- oder Protokollierungsdatenbank, die nur selten gelesen wird. Der Punkt ist, dass es gelegentlich vorkommen kann, dass eine spezialisierte Datenbank eingerichtet wird, für die das Standardsperrschema nicht passt und die Sie nicht ändern können. Dann brauchen Sie eine Fülle von Pinatas... Ich meine Hinweise.

Aber das ist die Ausnahme, die die Regel bestätigt. Im Allgemeinen ist der Datenbankoptimierer schlauer als Sie, wenn es um Dinge wie Sperren geht.

1voto

stephbu Punkte 5051

Hängt davon ab - der Abfrageoptimierer trifft ziemlich gute Entscheidungen über die Absicht. Welche Hinweise verlangen Ihre DBAs? @Ned ist ein wenig verwirrt - ein Hinweis sagt dem Optimierer ausdrücklich, dass er keinen Pfad herausfinden soll, sondern stattdessen Ihre Optimierung verwenden soll.

Wenn man vorschreibt, dass man immer oder nie Hinweise verwenden sollte, dann ist das eine gewisse Ignoranz gegenüber den Problemen, die durch Hinweise gelöst werden sollen. Es gibt einige Fälle, in denen sich Hinweise als kritisch erwiesen haben:

  • NOLOCK, um explizit Lesesperren von Domänennachschlagetabellen zu entfernen, die innerhalb einer Transaktion abgefragt werden.
  • Festnageln eines Abfrageplans auf einen bestimmten Index aufgrund von Statistik-"Drift" während umfangreicher Aktualisierungen (in diesem Fall kehrte der Plan zu einer Tabellensuche in einer Tabelle mit 10 Mio. Zeilen zurück, anstatt den geclusterten Index zu verwenden)

Ich musste noch nie Join-Hinweise verwenden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X