Freigeben über


Leistung mithilfe von FetchXml optimieren

Anmerkung

Hinweise zu allgemeinen Dingen, die beim Erstellen von Dataverse-Abfragen zu vermeiden sind, finden Sie unter Abfrageantimuster. Die folgenden Abschnitte sind für FetchXML spezifisch.

„Late Materialize”-Abfrage

Wenn Sie viele Such- und berechnete Spalten auswählen und Leistungsprobleme auftreten, können Sie versuchen, das boolesche -Attribut des latematerialize festzulegen. Im Hintergrund zerlegt diese Einstellung die Abfrage in kleinere Teile und setzt die Ergebnisse neu zusammen, bevor sie an Sie zurückgegeben werden.

Die Verwendung des latematerialize-Attributs bringt unter Umständen nicht immer einen Leistungsvorteil. Dadurch werden einfache Abfragen möglicherweise langsamer ausgeführt. Am vorteilhaftesten ist es, wenn Ihre Abfrage:

  • Viele Verknüpfungen hat
  • Enthält viele Such- oder berechnete Spalten

Abfragehinweise

Wichtig

Wenden Sie diese Optionen nur an, wenn dies vom technischen Microsoft-Support empfohlen wird. Eine falsche Verwendung dieser Optionen kann die Leistung einer Abfrage beeinträchtigen.

Microsoft SQL Server unterstützt viele Abfragehinweise zur Optimierung von Abfragen. FetchXML unterstützt Abfragehinweise und kann diese Abfrageoptionen mithilfe der Element abrufenOptionen Attribute an den SQL-Server übergeben.

Abfrageoption SQL Server-Hinweis
ForceOrder Befehl durchsetzen
DisableRowGoal Hinweis: DISABLE_OPTIMIZER_ROWGOAL
EnableOptimizerHotfixes Hinweis: ENABLE_QUERY_OPTIMIZER_HOTFIXES
LoopJoin Loop verbinden
MergeJoin Zusammenführen
HashJoin Hashbeitritt
NO_PERFORMANCE_SPOOL NO_PERFORMANCE_SPOOL
ENABLE_HIST_AMENDMENT_FOR_ASC_KEYS Hinweis: ENABLE_HIST_AMENDMENT_FOR_ASC_KEYS

Weitere Informationen: Hinweise (Transact-SQL) – Abfrage

Keine Sperre

In früheren Versionen war das no-lock-Attribut, das verwendet wird, um gemeinsame Sperren für Datensätze zu verhindern. Es ist nicht mehr erforderlich, dieses Attribut einzuschließen.

Vereinigungshinweis

Sie können die Leistung verbessern, indem Sie ein Filterelement hinzufügen, das die Bedingung für Spalten in verschiedenen Tabellen festlegt, indem Sie das hint-Attribut auf union festlegen. Es gibt jedoch einige Einschränkungen:

  • Der Filter muss den or-Filtertyp verwenden.
  • Jede Abfrage kann nur einen union-Hinweis enthalten.
  • Wenn ein Filter mit union-Hinweis sich nicht im Filter der obersten Ebene befindet, transformiert Dataverse die Abfrage und verschiebt den Filter mit einem union-Hinweis zum Stammfilter.
  • Wenn ein union-Hinweis mehr als drei Ebenen hat, wird er ignoriert.

Im folgenden Beispiel wird ein Filter mit einem union-Hinweis auf die telephone1-Spalte für beide Konto- und Kontakt-Tabellen festgelegt.

<fetch>
   <entity name="email">
      <attribute name="activityid" />
      <attribute name="subject" />
      <filter type="and">
         <condition attribute="subject"
            operator="like"
            value="Alert:%" />
         <condition attribute="statecode"
            operator="eq"
            value="0" />
         <filter type="or"
            hint="union">
            <condition attribute="telephone1"
               operator="eq"
               value="555-123-4567"
               entityname="ac" />
            <condition attribute="telephone1"
               operator="eq"
               value="555-123-4567"
               entityname="co" />
         </filter>
      </filter>
      <link-entity name="account"
         from="accountid"
         to="regardingobjectid"
         link-type="outer"
         alias="ac" />
      <link-entity name="contact"
         from="contactid"
         to="regardingobjectid"
         link-type="outer"
         alias="co" />
   </entity>
</fetch>

Automatische Abfrageoptimierung

Es sollte Sie nicht überraschen, wenn sich die Leistung einer langsamen Abfrage verbessert, ohne dass Sie etwas daran ändern. Dataverse überwacht aktiv Datenabrufvorgänge, um die Leistung zu verbessern. Wenn eine bestimmte Abfrage mit Standardtabellen schlecht ausgeführt wird, nimmt Dataverse möglicherweise automatisch Änderungen vor, die die Leistung der Abfrage verbessern. Dieses Verhalten kann dazu führen, dass bestimmte Leistungsprobleme vorübergehend auftreten, da sie später nicht reproduziert werden können.

Für die automatische Abfrageoptimierung ist keine Konfiguration erforderlich. Sie ist standardmäßig für jeden aktiviert.

Siehe auch

Daten mithilfe von FetchXml abfragen
Daten mithilfe von FetchXml abrufen
Spalten mithilfe von FetchXml auswählen
Tabellen mithilfe von FetchXml verknüpfen
Zeilen mithilfe von FetchXml anordnen
Zeilen mithilfe von FetchXml filtern
Ergebnisse mithilfe von FetchXml auslagern
Daten mithilfe von FetchXML aggregieren
Zeilen mithilfe von FetchXml zählen
FetchXml-Referenz
FetchXml-Beispielcode
Abfrage-Anti-Muster