Hinweise in SQL Server
-
06-07-2019 - |
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?
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.