Es scheint ziemlich akzeptiert zu sein, dass die Einbeziehung des Schemaeigners in die Abfrage die Leistung der Datenbank erhöht, z. B .:
SELECT x FROM [dbo].Foo
vs SELECT x FROM Foo
.
Dies soll eine Suche speichern, weil SQL Server andernfalls im Kontext des Fooos nach einer Foo-Tabelle sucht, die dem Benutzer gehört.
Heute wurde mir gesagt, dass das Einschließen des Datenbanknamens die Leistung auf die gleiche Weise verbessert, selbst wenn Sie die Datenbank abfragen, die Sie in Ihrer Verbindungszeichenfolge ausgewählt haben:
%Vor%Gibt es etwas Wahres daran? Ist das als Kodierungsstandard sinnvoll? Führt dies (sogar das erste Beispiel) zu messbaren Vorteilen?
Sprechen wir über ein paar Zyklen für eine zusätzliche Wörterbuch-Suche auf dem Datenbankserver vs aufgeblähter SQL und zusätzliche Verkettung auf dem Webserver (oder anderen Client)?
Beachten Sie, dass dies eine Kompilierungsbindung ist, keine Ausführung. Wenn Sie also die gleiche Abfrage 1 Million Mal ausführen, wird nur die erste Ausführung die Nachschlagezeit "treffen", der Rest wird den gleichen Plan wiederverwenden und die Pläne sind vorgebunden (Namen sind bereits in Objekt-IDs aufgelöst).
In diesem Fall würde ich persönlich die Lesbarkeit gegenüber der winzigen Leistungssteigerung bevorzugen, die dies möglicherweise verursachen könnte.
%Vor%Scheint viel einfacher zu scannen als:
%Vor%Probieren Sie es aus? Einfach eine Million Abfragen von beiden durchlaufen und sehen, welche zuerst beendet wird.
Ich schätze, es ist eine Ladung Koje. Die Entwickler von MS SQL verbringen Millionen von Stunden damit, die Effizienz für Suchalgorithmen und Speichermethoden zu erforschen, die nur dann durchkreuzt werden, wenn die Benutzer keine vollständig qualifizierten Tabellennamen angeben. Lachbar.
SQL Server wird keine zusätzliche Suche durchführen, wenn das Standardschema das gleiche ist. Es sollte enthalten sein, wenn es nicht ist, und es ist eine Abfrage, die viel verwendet wird.
Der Datenbankname wird die Abfrageleistung nicht unterstützen. Ich denke, dies könnte mit dem Estimated Execution Plan im Management Studio gesehen werden.
Wie Spencer sagte - probiere es aus, vergewissere dich natürlich, dass du jedes Mal den Cache löschst, da dies deine Ergebnisse beeinträchtigen wird.
Ich wäre auch überrascht, wenn es einen nennenswerten Unterschied machen würde.
Tags und Links sql-server performance