Freigeben über


Die Leistung mit QueryExpression optimieren

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

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. QueryExpression unterstützt Abfragehinweise und kann diese Abfrageoptionen mithilfe der QueryExpression.QueryHints-Eigenschaft an 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 Hash Join
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 diente die QueryExpression.NoLock-Eigenschaft dazu, gemeinsame Sperren für Datensätze zu verhindern. Es ist nicht mehr notwendig, diese Eigenschaft einzuschließen

Vereinigungshinweis

Sie können die Leistung verbessern, wenn Sie eine FilterExpression hinzufügen, welche die ConditionExpression für Spalten in verschiedenen Tabellen festlegt, indem Sie die FilterExpression.FilterHint-Eigenschaft auf union festlegen. Es gibt jedoch einige Einschränkungen:

  • Der FilterExpression.FilterOperator muss den LogicalOperator.Or verwenden.
  • Jede Abfrage kann nur einen union-Hinweis enthalten.
  • Wenn sich eine FilterExpression mit dem union-Hinweis nicht im Filter der obersten Ebene befindet, wandelt Dataverse die Abfrage um 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.

QueryExpression query = new("email")
{
   ColumnSet = new ColumnSet("activityid", "subject"),
   Criteria = new FilterExpression(LogicalOperator.And)
   {
      Conditions = {
         {
            new ConditionExpression(
               attributeName:"subject",
               conditionOperator:ConditionOperator.Like,
               value: "Alert:%")
         },
         {
            new ConditionExpression(
               attributeName:"statecode",
               conditionOperator:ConditionOperator.Equal,
               value: 0)
         }
      },
      Filters = {
         {
            new FilterExpression(LogicalOperator.Or){
               FilterHint = "union",
               Conditions = {
                  {
                     new ConditionExpression(
                        attributeName:"telephone1",
                        conditionOperator:ConditionOperator.Equal,
                        value: "555-123-4567"){
                           EntityName = "ac"
                        }
                  },
                  {
                     new ConditionExpression(
                        attributeName:"telephone1",
                        conditionOperator:ConditionOperator.Equal,
                        value: "555-123-4567"){
                           EntityName = "co"
                        }
                  }
               }
            }
         }
      }
   }
};        

LinkEntity linkToAccount = query.AddLink(
      linkToEntityName: "account",
      linkFromAttributeName: "regardingobjectid",
      linkToAttributeName: "accountid",
      joinOperator: JoinOperator.LeftOuter);
linkToAccount.EntityAlias = "ac";

LinkEntity linkToContact = query.AddLink(
      linkToEntityName: "contact",
      linkFromAttributeName: "regardingobjectid",
      linkToAttributeName: "contactid",
      joinOperator: JoinOperator.LeftOuter);
linkToContact.EntityAlias = "co";

Siehe auch

Daten mithilfe von QueryExpression abfragen
Spalten mit QueryExpression auswählen
Tabellen mit QueryExpression verknüpfen
Zeilen mithilfe von QueryExpression sortieren
Zeilen mithilfe von QueryExpression filtern
Paging von Ergebnissen mit QueryExpression
Daten mithilfe von QueryExpression aggregieren
Zeilen mithilfe von QueryExpression zählen
Abfrage-Anti-Muster