Optimieren von verteilten Abfragen

Um die Leistung zu verbessern, nimmt SQL Server zwei für verteilte Abfragen spezifische Formen der Optimierung vor:

  • Remoteabfrageausführung mithilfe von OLE DB-Befehlsanbietern.

    Ein OLE DB-Anbieter wird als SQL-Befehlsanbieter angesehen, wenn er die folgenden Minimalanforderungen erfüllt:

    • Unterstützung des Command-Objekts und seiner obligatorischen Schnittstellen.

    • Unterstützung der DBPROPVAL SQL SUBMINIMUM-Syntax oder von ISO auf Eingangsstufe (Entry Level) oder höher oder von ODBC auf Core Level oder höher. Der Anbieter muss diese Dialektstufe über die OLE DB-Eigenschaft DBPROP_SQLSUPPORT verfügbar machen.

  • Indizierter Zugriff mithilfe von OLE DB-Indexanbietern.

    Ein OLE DB-Anbieter wird als Indexanbieter angesehen, wenn er die folgenden Minimalanforderungen erfüllt:

    • Unterstützung der IDBSchemaRowset-Schnittstelle mit den TABLES-, COLUMNS- und INDEXES-Schemarowsets.

    • Unterstützung des Öffnens eines Rowsets für einen Index mithilfe von IOpenRowset durch Angeben des Indexnamens und des zugehörigen Basistabellennamens.

    • Das Index-Objekt sollte die obligatorischen Schnittstellen unterstützen: IRowset, IRowsetIndex, IAccessor, IColumnsInfo, IRowsetInfo und IConvertTypes.

    • Rowsets, die für die indizierte Basistabelle geöffnet werden (mithilfe von IOpenRowset), müssen die IRowsetLocate-Schnittstelle für die Positionierung auf einer Zeile basierend auf einem vom Index abgerufenen Lesezeichen unterstützen.

Remoteabfrageausführung

SQL Server versucht, die Auswertung einer verteilten Abfrage so weit wie möglich an den SQL-Befehlsanbieter zu delegieren. Eine SQL-Abfrage, die nur auf die in der Datenquelle des Anbieters gespeicherten Remotetabellen zugreift, wird aus der ursprünglichen verteilten Abfrage extrahiert und für den Anbieter ausgeführt. Dieses Verhalten verringert die Anzahl der Zeilen, die vom Anbieter zurückgegeben werden, und ermöglicht es dem Anbieter, beim Auswerten der Abfrage seine Indizes zu verwenden.

Folgende Aspekte beeinflussen, in welchem Umfang die ursprüngliche verteilte Abfrage an den SQL-Befehlsanbieter delegiert wird:

  • Die Dialektstufe, die vom SQL-Befehlsanbieter unterstützt wird.

  • Kompatibilität der Sortierung

Dialektstufe, die vom SQL-Befehlsanbieter unterstützt wird.

SQL Server delegiert Operationen nur dann, wenn sie von der jeweiligen Dialektstufe unterstützt werden. Die Dialektstufen lauten, mit der höchsten Stufe beginnend: SQL Server, ISO Entry Level, ODBC Core und Jet. Je höher die Dialektstufe, desto mehr Operationen kann SQL Server an den Anbieter delegieren.

HinweisHinweis

Die SQL Server-Dialektstufe wird verwendet, wenn der Anbieter einem SQL Server-Verbindungsserver entspricht.

Jede Dialektstufe ist eine Obermenge der niedrigeren Stufen. Wird eine Operation an eine bestimmte Stufe delegiert, wird sie daher zugleich an alle höheren Stufen delegiert.

Abfragen, die bit- und uniqueidentifer-Datentypen betreffen, werden in keinem Fall an einen Anbieter delegiert und stets lokal ausgewertet:

Wenn die SET-Option CONCAT_NULL_YIELDS_NULL auf OFF festgelegt wurde, erfolgt die Zeichenfolgenverkettung immer lokal.

Die folgenden Operationen bzw. syntaktischen Elemente werden an die angezeigte Dialektstufe und an alle höheren Stufen delegiert:

  • SQL Server: Äußere Verknüpfung, CUBE, ROLLUP, Modulo-Operator (%), bitweise Operatoren, Zeichenfolgenfunktionen und arithmetische Systemfunktionen.

  • ISO Entry Level: UNION und UNION ALL.

  • ODBC Core: Aggregatfunktionen mit DISTINCT und Zeichenfolgenkonstanten.

  • Jet: Aggregatfunktionen ohne DISTINCT, Sortieren (ORDER BY), innere Verknüpfungen, Prädikate, Operatoren für Unterabfragen (EXISTS, ALL, SOME, IN), DISTINCT, arithmetische Operatoren (soweit nicht in höheren Stufen aufgeführt), Konstanten (soweit nicht in höheren Stufen aufgeführt) und alle logischen Operatoren.

    An einen ISO Entry Level-Anbieter, der nicht zugleich SQL Server ist, werden beispielsweise alle Vorgänge delegiert, die keines der folgenden Merkmale aufweisen: CUBE, ROLLUP, äußere Verknüpfung, Modulo-Operator (%), bitweise Operatoren, Zeichenfolgenfunktion und arithmetische Systemfunktionen.

Kompatibilität der Sortierung

Für verteilte Abfragen wird die Semantik für Vergleichsvorgänge für alle Zeichendaten durch den Zeichensatz und die Sortierreihenfolge der lokalen Instanz von SQL Server definiert. SQL Server unterstützt mehrere Sortierungen. Die Sortierungen können für jede Spalte unterschiedlich sein, und jeder Zeichenwert besitzt eine zugehörige Sortierungseigenschaft. SQL Server interpretiert die Sortierungseigenschaft von Zeichendaten aus einer Remotedatenquelle und behandelt diese dementsprechend. Weitere Informationen zur Sortierung von Remotespalten finden Sie unter Sortierungen in verteilten Abfragen.

SQL Server kann Vergleiche und ORDER BY-Operationen für Zeichenspalten nur dann an einen Anbieter delegieren, wenn Folgendes ermittelt werden kann:

  • Die zugrunde liegende Datenquelle verwendet die Sortierreihenfolge und den Zeichensatz der Spalte.

  • Die Semantik für Zeichenvergleiche entspricht dem ISO-Standard und dem SQL Server-Standard.

Das Thema Sortierungen in verteilten Abfragen fasst zusammen, wie SQL Server eine Sortierung für jede Spalte ermittelt. Wenn die Remotedatenquelle diese Sortierung unterstützt, wird der Anbieter als sortierungskompatibel angesehen.

Andere Aspekte der SQL-Unterstützung

Die folgenden SQL-Syntaxelemente werden nicht von den SQL-Dialektstufen vorgeschrieben:

  • Unterstützung von geschachtelten Abfragen

    Wenn der Anbieter geschachtelte Abfragen (Unterabfragen) unterstützt, kann SQL Server diese Operationen an den Anbieter delegieren. Da die Unterstützung von geschachtelten Abfragen nicht automatisch mit OLE DB-Eigenschaften ermittelt werden kann, muss der Systemadministrator die Anbieteroption NestedQueries festlegen, um SQL Server anzuzeigen, dass der Anbieter geschachtelte Abfragen unterstützt.

  • Unterstützung von Parametermarkern

    Wenn der Anbieter die Ausführung von parametrisierten Abfragen durch Verwenden der Parametermarkern ? in einer Abfrage unterstützt, kann SQL Server die Ausführung von parametrisierten Abfragen an den Anbieter delegieren. Da die Unterstützung von Parametermarkern nicht automatisch mit OLE DB-Eigenschaften ermittelt werden kann, muss der Systemadministrator die Anbieteroption DynamicParameters festlegen, um SQL Server anzuzeigen, dass der Anbieter Parametermarkierungen unterstützt.

  • LIKE-Unterstützung

    Wenn der Anbieter den LIKE-Operator so unterstützt, wie er in der SQL Server-Syntax und -Semantik implementiert wurde, kann die SqlServerLike-Anbieteroption festgelegt werden, um Unterstützung anzugeben.

    Weitere Informationen zum Festlegen dieser Anbieteroptionen finden Sie unter Konfigurieren von OLE DB-Anbietern für verteilte Abfragen.

Indizierter Zugriff

SQL Server kann Ausführungsstrategien verwenden, bei denen die Indizes des Indexanbieters verwendet werden, um Prädikate auszuwerten und Sortieroperationen für Remotetabellen auszuführen. Legen Sie die Anbieteroption IndexAsAccessPath fest, um den indizierten Zugriff für einen Anbieter zu aktivieren.

Wenn Sie Indizes für Zeichenspalten verwenden, legen Sie außerdem die Verbindungsserver-Konfigurationsoption collation compatible für den betreffenden Verbindungsserver auf true fest. Weitere Informationen finden Sie unter sp_serveroption (Transact-SQL).

HinweisHinweis

Stellen Sie den Ausführungsplan mithilfe von SQL Server Management Studio grafisch dar, um den Ausführungsplan für eine bestimmte verteilte Abfrage zu ermitteln. Wenn im Ausführungsplan die Remoteabfrageausführung vorgesehen ist, wird diese mithilfe des logischen und physikalischen Operators Remote Query dargestellt. Das Argument dieses Operators zeigt die remote ausgeführte Abfrage an.