Optimiser les performances à l’aide de FetchXml
Note
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 à FetchXml.
Requête de matérialisation tardive
Si vous sélectionnez de nombreuses colonnes de recherche et calculées et que vous rencontrez des problèmes de performances, vous pouvez essayer de définir l’attribut latematerialize
de l’élément fetch. En arrière-plan, ce paramètre divise la requête en parties plus petites et réassemble les résultats avant de vous les renvoyer.
L’utilisation de l’attribut latematerialize
peut ne pas toujours offrir un avantage en termes de performances. Il peut ralentir l’exécution de requêtes simples. Il est plus bénéfique lorsque votre requête :
- Dispose de nombreuses jointures
- Contient de nombreuses colonnes de recherche ou calculées
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. FetchXML prend en charge les indicateurs de requête et peut transmettre ces options de requête à SQL Server à l’aide de l’attribut options de l’élément fetch.
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, l’attribut no-lock
était utilisé pour empêcher les verrous partagés dans les enregistrements. Il n’est plus nécessaire d’inclure cet attribut.
Indicateur d’union
Vous pouvez améliorer les performances lors de l’ajout d’un élément filter qui définit la condition pour les colonnes de différentes tables en définissant l’attribut hint
sur union
. Mais certaines restrictions s’appliquent :
- Le filtre doit utiliser le type de filtre
or
. - Chaque requête ne peut contenir qu’un seul indicateur
union
. - Si un filtre avec un indicateur
union
n’est pas un filtre de niveau supérieur, Dataverse transforme la requête et déplace le filtre avec un indicateurunion
vers le 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.
<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>
Voir aussi
Interroger des données à l’aide de FetchXml
Récupérer des données à l’aide de FetchXml
Sélectionner des colonnes à l’aide de FetchXml
Joindre des tables à l’aide de FetchXml
Trier des lignes à l’aide de FetchXml
Filtrer des lignes à l’aide de FetchXml
Paginer des résultats à l’aide de FetchXml
Agréger des données à l’aide de FetchXml
Compter des lignes à l’aide de FetchXml
Référence FetchXml
Exemple de code FetchXml
Anti-modèles de requête