SQL Server-Leistung und vollständig qualifizierte Tabellennamen

8

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)?

    
kodbuse 10.07.2009, 22:59
quelle

5 Antworten

11

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).

    
Remus Rusanu 10.07.2009, 23:51
quelle
4

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%     
Steve Temple 10.07.2009 23:23
quelle
1

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.

    
Spencer Ruport 10.07.2009 23:08
quelle
1

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.

    
ajdramos 10.07.2009 23:20
quelle
0

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.

    
Tetraneutron 10.07.2009 23:12
quelle

Tags und Links