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:
- ConvertQuoteToSalesOrderRequest
- GenerateInvoiceFromOpportunityRequest
- GenerateQuoteFromOpportunityRequest
- GenerateSalesOrderFromOpportunityRequest
- RetrieveAllChildUsersSystemUserRequest
- RetrieveBusinessHierarchyBusinessUnitRequest
- RetrieveMembersTeamRequest
- RetrieveRequest
- RetrieveSubsidiaryTeamsBusinessUnitRequest
- RetrieveSubsidiaryUsersBusinessUnitRequest
- RetrieveTeamsSystemUserRequest
- RetrieveUnpublishedRequest
- RetrieveUserSettingsSystemUserRequest
- ReviseQuoteRequest
- SearchByBodyKbArticleRequest
- IOrganizationService.Retrieve
- QueryExpression
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).