Kein Leistungsunterschied. Sie verwenden jedoch gerade Schemas (auch wenn Sie es nicht wissen).
Die Verwendung von Referenzen auf Schemaobjekte wie Tabellen, Stored Procedures, benutzerdefinierte Funktionen usw., die nicht Schema qualifiziert hat Auswirkungen auf die Leistung haben. Referenzen sollten immer nach Schema qualifiziert sein. Solche unqualifizierten Referenzen müssen aufgelöst werden, und das geschieht folgendermaßen:
- Suchen Sie zunächst nach einem Objekt mit demselben Namen und Typ unter dem Standardschema des Benutzers, unter dessen Anmeldeinformationen die Sitzung eingerichtet wurde (z
jsmith
. B. ). Wenn gefunden, wird diese Instanz verwendet.
- Suchen Sie andernfalls unter dem Schema nach einem Objekt mit demselben Namen und Typ
dbo
.
Dies hat mehrere Auswirkungen:
- In den meisten Fällen sind zwei Suchvorgänge erforderlich, um die Referenz aufzulösen, und nicht die einzelne Suche, die erforderlich ist, wenn die Referenz schemaqualifiziert ist.
- Der Ausführungsplan, der erhalten wird, wenn die Abfrage / gespeicherte Prozedur / benutzerdefinierte Funktion gebunden ist, kann nicht zwischengespeichert und wiederverwendet werden.
Der letzte Effekt, den Sie nur dann schmerzhaft feststellen, wenn etwas kaputt geht, besteht darin, dass verschiedene Benutzer möglicherweise unterschiedliche Ergebnisse aus einer bestimmten Abfrage oder gespeicherten Prozedur erhalten. So etwas select * from foo join bar
mag für mich als Datenbankbesitzer gut funktionieren. Es kann für Benutzer jsmith
fehlerhaft sein, die versehentlich oder nicht versehentlich eine Tabelle erstellt haben, die foo
unter jsmith.foo
demselben eigenen Schema ( ) in derselben Datenbank benannt ist.
Aus diesem Grunde auch, create
und drop
Aussagen sollten Schema qualifizieren Sie den Namen des Objekts erstellt oder gelöscht werden.