Frage

Sind Hinweise wirklich notwendig, für jede SQL-Anweisung? Wir haben eine dba, die darüber anal ist und fragt uns Hinweise setzen auf alle wählen und Update-Anweisungen in unserer gespeicherten Procs. Ist das wirklich notwendig?

War es hilfreich?

Lösung

Nicht in der Regel. Setzen sie auf alles, was klingt wie viel des Guten.

Die Dokumentation sagt

Da die SQL Server-Abfrage-Optimierer in der Regel den besten Ausführungsplan für eine Abfrage auswählt, empfehlen wir, dass join_hint, query_hint und table_hint von erfahrenen Entwicklern und Datenbankadministratoren

Andere Tipps

Ihr DBA ist falsch .

MS :

  

Da die SQL Server-Abfrage-Optimierer   typischerweise wählt die beste Ausführung   Plan für eine Abfrage, empfehlen wir,    Verknüpfungshinweis Abfrage-Hinweis und    Tabelle Hinweis nur als letztes Mittel eingesetzt werden   Resort von erfahrenen Entwicklern und   Datenbankadministratoren.

Hinweise sind lediglich Hinweise. Sie helfen, den Optimierer möglich, den besten Job zu machen. Aber wie bei jeder Optimierung, sollten Sie auf die Aussagen konzentrieren, die tatsächlich Probleme sind.

Abhängig - der Abfrageoptimierer macht ziemlich gute Wahl des Vorsatzes. Welche Hinweise sind anspruchsvoll Ihr DBA? @Ned ist etwas nicht in Ordnung - ein Hinweis ausdrücklich den Optimierer sagt einen Pfad nicht zu figur out -. Aber Ihre Optimierung stattdessen

Bei der Regelung, dass Sie sollten immer oder nie Hinweise verwenden ist etwas unwissend über die Probleme, die Hinweise sind zu lösen. Einige Gelegenheiten, wo Hinweise wurden kritisch:

  • NOLOCK entfernen explizit Lesesperren von Domain-Lookup-Tabellen innerhalb einer Transaktion abgefragt.
  • Abfrage-Plan auf einen bestimmten Index aufgrund von Statistiken „Drift“ bei schwerem Updates (in diesem Fall des Plan Tisch Scan auf einer 10m Reihe Tabelle zurück als den Clustered-Index verwenden) Nageln

musste nie Hinweise beitreten verwenden.

Normalerweise dies nur nach hinten ist. Es ist jedoch abhängig von Ihrer Situation könnte wünschenswert sein.

Zum Beispiel haben wir eine Datenbank (eine Reihe von Datenbanken auf einem Server, tatsächlich), wo die Daten einen all nächtlicher Snapshot-Dump eines Mainframe-System, verwendet für die Berichterstattung und andere Zwecke. Neben dem Batch-Prozess, der die Datenbanken jede Nacht neu erstellt, nichts tut alles Schrifttum zu diesem System. In diesem Zusammenhang ist das Standard-Sperrschema nicht angemessen und Politik zwischen unserer Gruppe und der IT-Gruppe, die verhindert, dass wir es ändert alle unsere Server verwaltet. Also: so ziemlich alle Anfragen an diesen dbs haben die with (nolock) Hinweise

.

Ich stelle mir vor es gibt auch andere Situationen, in denen Sie Berichtsdatenbanken ohne Schreiben haben kann, oder vielleicht umgekehrt: eine Archivierung oder Protokolldatenbank, die nur selten gelesen. Der Punkt ist, dass gelegentlich eine spezielle Datenbank eingerichtet werden kann, in denen das Standard-Sperrschema nicht paßt und Sie sind nicht in der Lage, es zu ändern. Dann benötigen Sie eine Fülle von Pinatas ... I Hinweise bedeuten.

Aber das ist die Ausnahme, die die Regel bestätigt. Im Allgemeinen ist die Datenbank-Optimierer intelligenter, als Sie sind, wenn es um Dinge geht, wie zu verriegeln.

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