Ne pas récupérer toutes les colonnes Entité via les API de requête

Catégorie : Performance

Potentiel d’impact : Élevé

Symptômes

La récupération de toutes les colonnes peut entraîner :

  • Des problèmes de performances dus à la quantité de données étant récupérée
  • Exécuter fortuite de plug-in/processus

Recommandation

Pour des performances optimales, vous devez uniquement sélectionner la quantité minimale de données requises par votre application en interrogeant les données Microsoft Dataverse.

Paramètre ColumnSet

Lorsque vous utilisez la méthode IOrganizationService.Retrieve définissez le paramètre columnSet sur une instance ColumnSet avec des colonnes spécifiées. Lorsque vous utilisez QueryExpression définissez la propriété ColumnSet avec les attributs obligatoires.

Voici quelques exemples :

  • Surcharge du constructeur ColumnSet(param string[] columns) pour QueryExpression.

        var query = new QueryExpression("account")
        {
            ColumnSet = new ColumnSet("name", "address1_city")
        };
    
        var results = service.RetrieveMultiple(query);
    
  • Surcharge du constructeur ColumnSet(param string[] columns) pour RetrieveRequest.

        var entity = service.Retrieve("account", Guid.NewGuid(), new ColumnSet("name", "address1_city"));
    
  • ColumnSet.AddColumn(String) .

        var query = new QueryExpression("account");
        query.ColumnSet.AddColumn("name");
        query.ColumnSet.AddColumn("address1_city");
    
        var results = service.RetrieveMultiple(query);
    
  • ColumnSet.AddColumns(String[]) .

        var query = new QueryExpression("account");
        query.ColumnSet.AddColumns("name", "address1_city");
    
        var results = service.RetrieveMultiple(query);
    

Les classes suivantes contiennent une instance ColumnSet :

Schémas problématiques

Requêtes qui comprennent un ColumnSet défini où la propriété AllColumns est true demandent à la plateforme de publier une commande SQL pour « SÉLECTIONNER * » toutes les données physiques incluses dans le plan de requête. Ce scénario doit être évité autant que possible.

Avertissement

Ces scénarios doivent être évités.

  • Appel de méthode de configuration ColumnSet.AllColumns .

        var columns = new ColumnSet();
        columns.AllColumns = true;
    
        var query = new QueryExpression("account");
        query.ColumnSet = columns;
    
        var results = service.RetrieveMultiple(query);
    
  • Surcharge du constructeur ColumnSet(bool allColumns).

        var query = new QueryExpression("account")
        {
            ColumnSet = new ColumnSet(true)
        };
    
        var results = service.RetrieveMultiple(query);
    
  • Surcharge du constructeur ColumnSet(bool allColumns) pour RetrieveRequest.

        var entity = service.Retrieve("account", Guid.Parse("bec45132-392a-4617-b935-a64ef04738e4"), new ColumnSet(true));
    

Informations supplémentaires

Les requêtes envoyées pour récupérer les données de Dynamics 365 ne doivent pas sélectionner toutes les colonnes. En revanche, différentes colonnes spécifiques doivent être spécifiées dans l’instance ColumnSet associée à la requête. La récupération de toutes les colonnes d’une entité peut avoir une incidence négative sur les performances. En outre, vous pouvez déclencher involontairement des événements d’enregistrement de plug-in en récupérant les colonnes que vous n’utilisez pas avec et en publiant une mise à jour.

Voir aussi

ColumnSet Class
Utilisation de la classe ColumnSet
Générer des requêtes avec QueryExpression

Notes

Pouvez-vous nous indiquer vos préférences de langue pour la documentation ? Répondez à un court questionnaire. (veuillez noter que ce questionnaire est en anglais)

Le questionnaire vous prendra environ sept minutes. Aucune donnée personnelle n’est collectée (déclaration de confidentialité).