Freigeben über


Rufen Sie nicht alle Spalten der Entität über Query-APIs ab

Kategorie: Leistung

Wirkungspotential: Hoch

Symptome

Das Abrufen aller Spalten kann zu Folgendem führen:

  • Performance-Probleme durch die Menge der abgerufenen Daten
  • Unbeabsichtigte Ausführung von Plugins und Prozessen

Anleitung

Für eine optimale Leistung sollten Sie bei der Abfrage von Daten des Microsoft Dataverse nur die von Ihrer Anwendung benötigte Mindestmenge an Daten auswählen.

ColumnSet-Parameter

Wenn Sie die IOrganizationService verwenden.Retrieve Methode setzt den Parameter columnSet auf eine Instanz ColumnSet mit angegebenen Spalten. Wenn Sie QueryExpression verwenden, setzen Sie die Eigenschaft ColumnSet mit den erforderlichen Attributen.

Im Folgenden finden Sie einige Beispiele:

  • ColumnSet(param string[] columns)-Konstruktorüberladung für QueryExpression.

        var query = new QueryExpression("account")
        {
            ColumnSet = new ColumnSet("name", "address1_city")
        };
    
        var results = service.RetrieveMultiple(query);
    
  • ColumnSet(param string[] columns)-Konstruktorüberladung für RetrieveRequest.

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

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

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

Die folgenden Klassen enthalten eine ColumnSet-Instanz:

Problematische Muster

Abfragen, die eine definierte ColumnSet beinhalten, bei denen die Eigenschaft AllColumns true ist, weisen die Plattform an, einen SQL-Befehl zum "SELECT *" für alle physischen Daten, die im Abfrageplan enthalten sind, auszugeben. Dieses Szenario sollte nach Möglichkeit vermieden werden.

Warnung

Diese Szenarien sollten vermieden werden.

  • ColumnSet.AllColumns Aufruf der Setter-Methode.

        var columns = new ColumnSet();
        columns.AllColumns = true;
    
        var query = new QueryExpression("account");
        query.ColumnSet = columns;
    
        var results = service.RetrieveMultiple(query);
    
  • ColumnSet(bool allColumns) Konstruktorüberladung.

        var query = new QueryExpression("account")
        {
            ColumnSet = new ColumnSet(true)
        };
    
        var results = service.RetrieveMultiple(query);
    
  • ColumnSet(bool allColumns) Konstruktorüberladung für RetrieveRequest.

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

Weitere Informationen

Abfragen, die zum Abrufen von Daten aus Dynamics 365 gesendet werden, sollten nicht alle Spalten markieren. Vielmehr sollten in der der Abfrage zugeordneten Instanz ColumnSet spezifische Einzelspalten angegeben werden. Das Abrufen aller Spalten einer Entität kann sich negativ auf die Performance auswirken. Darüber hinaus können Sie unbeabsichtigt Plug-in-Registrierungsereignisse auslösen, indem Sie Spalten abrufen, mit denen Sie nicht arbeiten, und ein Update durchführen.

Siehe auch

ColumnSet Class
Spalten mit QueryExpression auswählen
Daten mithilfe von QueryExpression abfragen

Hinweis

Können Sie uns Ihre Präferenzen für die Dokumentationssprache mitteilen? Nehmen Sie an einer kurzen Umfrage teil. (Beachten Sie, dass diese Umfrage auf Englisch ist.)

Die Umfrage dauert etwa sieben Minuten. Es werden keine personenbezogenen Daten erhoben. (Datenschutzbestimmungen).