Optimiser les performances à l’aide de QueryExpression
Pour obtenir des conseils sur les aspects généraux à éviter lors de la composition de requêtes Dataverse, consultez Anti-modèles de requête. Les sections suivantes sont spécifiques à QueryExpression.
Indicateurs de requête
Important
Appliquez ces options uniquement lorsqu’elles sont recommandées par le support technique Microsoft. Une utilisation incorrecte de ces options peut dégrader les performances d’une requête.
Microsoft SQL Server prend en charge plusieurs indicateurs de requête pour optimiser les requêtes. QueryExpression Le langage FetchXML prend en charge les indicateurs de requête et peut transmettre ces options de requête à SQL Server avec propriété QueryExpression.QueryHints.
Option de requête | Conseil SQL Server |
---|---|
ForceOrder |
Forcer l’ordre |
DisableRowGoal |
Conseil : DISABLE_OPTIMIZER_ROWGOAL |
EnableOptimizerHotfixes |
Conseil : ENABLE_QUERY_OPTIMIZER_HOTFIXES |
LoopJoin |
Mettre en boucle la jonction |
MergeJoin |
Fusionner la jonction |
HashJoin |
Hacher la jonction |
NO_PERFORMANCE_SPOOL |
NO_PERFORMANCE_SPOOL |
ENABLE_HIST_AMENDMENT_FOR_ASC_KEYS |
Conseil : ENABLE_HIST_AMENDMENT_FOR_ASC_KEYS |
Plus d’information : Conseils (Transact-SQL) - Requête
Aucun verrou
Dans les versions antérieures, la propriété QueryExpression.NoLock utilisée pour empêcher les verrous partagés sur les enregistrements. Il n’est plus nécessaire d’inclure cette propriété
Indicateur d’union
Vous pouvez améliorer les performances en ajoutant un FilterExpression qui définit le ConditionExpression
des colonnes dans différentes tables en définissant le FilterExpression.FilterHint propriété à union
. Mais certaines restrictions s’appliquent :
- Le FilterExpression.FilterOperator doit utiliser LogicalOperator
.Or
. - Chaque requête ne peut contenir qu’un seul indicateur
union
. - Si un
FilterExpression
avec conseilunion
n’est pas au niveau du filtre supérieur, Dataverse transforme la requête et déplace le filtre avec ununion
conseil au filtre racine. - Si un indicateur
union
dispose de plus de trois niveaux de profondeur, il est ignoré.
L’exemple suivant définit un filtre avec l’indicateur union
sur la colonne telephone1
à la fois pour les tables compte et contact.
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";
Voir aussi
Interroger les données à l’aide de QueryExpression
Sélectionner des colonnes à l’aide de QueryExpression
Joindre des tables à l’aide de QueryExpression
Ordonner les lignes à l’aide de QueryExpression
Filtrer les lignes à l’aide de QueryExpression
Résultats de page à l’aide de QueryExpression
Agréger les données à l’aide de QueryExpression
Compter les lignes à l’aide de QueryExpression
Anti-modèles de requête