Wie wirkt sich die Verwendung separater Schemas auf die Leistung von SQL Server 2008 aus?


11

Ich möchte separate Schemas für Objekte mit unterschiedlichen Zwecken in unserer SQL Server 2008-Datenbank verwenden. Im Moment verwenden wir eine ziemlich nervenaufreibende Namenskonvention, um den Zweck einer Tabelle oder gespeicherten Prozedur anzugeben, und die Präfixe bedeuten, dass wir fünf oder sechs x-Zeichen einscannen müssen, bevor wir überhaupt den Beginn des eindeutigen Namens sehen. Ich möchte separate Schemata für Tabellen verwenden, die nur zur Steuerung der Benutzeroberfläche verwendet werden (Menüs, Rollen nach Person usw.), und für Tabellen, die Dimensionstabellen oder Faktentabellen usw. sind.

Meine Frage ist, wird es Leistungseinbußen geben, wenn die Verwendung mehrerer Schemas (Schema?) Für alles dem guten alten dbo entgegengesetzt war?

Antworten:


4

Abhängig von Ihrem Codierungsstil kann sich dies auf die Leistung des Abfrageoptimierers auswirken, wenn auch nur geringfügig. Wenn Sie auf eine Tabelle ohne Schema verweisen, muss der Optimierer versuchen, die Tabelle zuerst zu identifizieren, indem er die Tabellen im Standardschema des Benutzers überprüft (falls vorhanden), dann dbo. Und dann alles andere verwendet. Wenn Sie die Tabellen explizit als schema.table referenzieren, was wahrscheinlich ohnehin eine gute Praxis ist, wird auch dieser geringfügige Overhead vermieden.


1

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 barmag für mich als Datenbankbesitzer gut funktionieren. Es kann für Benutzer jsmithfehlerhaft sein, die versehentlich oder nicht versehentlich eine Tabelle erstellt haben, die foounter jsmith.foodemselben eigenen Schema ( ) in derselben Datenbank benannt ist.

Aus diesem Grunde auch, createund dropAussagen sollten Schema qualifizieren Sie den Namen des Objekts erstellt oder gelöscht werden.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.