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 demunion
-Hinweis nicht im Filter der obersten Ebene befindet, wandelt Dataverse die Abfrage um und verschiebt den Filter mit einemunion
-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