No recuperar la entidad todas las columnas mediante las API de consulta
Categoría: rendimiento
Potencial de impacto: alto
Síntomas
Recuperar todas las columnas puede provocar:
- Problemas de rendimiento por la cantidad de datos recuperados
- Ejecución involuntaria de complementos y procesos
Instrucciones
Para obtener un rendimiento óptimo, debe seleccionar solo una cantidad mínima de datos necesarios por su aplicación cuando se consultan datos de Microsoft Dataverse.
Parámetro de ColumnSet
Cuando usa el método IOrganizationService.Retrieve establezca el parámetro columnSet
en una instancia ColumnSet con columnas especificadas. Cuando se use QueryExpression establezca la propiedad ColumnSet con los atributos requeridos.
Estos son algunos ejemplos:
Sobrecarga del constructor ColumnSet (columnas de la cadena[] del parámetro) para QueryExpression.
var query = new QueryExpression("account") { ColumnSet = new ColumnSet("name", "address1_city") }; var results = service.RetrieveMultiple(query);
Sobrecarga del constructor ColumnSet (columnas de la cadena[] del parámetro) para RetrieveRequest.
var entity = service.Retrieve("account", Guid.NewGuid(), new ColumnSet("name", "address1_city"));
Llamada al método ColumnSet.AddColumn(String) .
var query = new QueryExpression("account"); query.ColumnSet.AddColumn("name"); query.ColumnSet.AddColumn("address1_city"); var results = service.RetrieveMultiple(query);
Llamada al método ColumnSet.AddColumns(String[]) .
var query = new QueryExpression("account"); query.ColumnSet.AddColumns("name", "address1_city"); var results = service.RetrieveMultiple(query);
Las siguientes contienen una instancia ColumnSet:
- ConvertQuoteToSalesOrderRequest
- GenerateInvoiceFromOpportunityRequest
- GenerateQuoteFromOpportunityRequest
- GenerateSalesOrderFromOpportunityRequest
- RetrieveAllChildUsersSystemUserRequest
- RetrieveBusinessHierarchyBusinessUnitRequest
- RetrieveMembersTeamRequest
- RetrieveRequest
- RetrieveSubsidiaryTeamsBusinessUnitRequest
- RetrieveSubsidiaryUsersBusinessUnitRequest
- RetrieveTeamsSystemUserRequest
- RetrieveUnpublishedRequest
- RetrieveUserSettingsSystemUserRequest
- ReviseQuoteRequest
- SearchByBodyKbArticleRequest
- IOrganizationService.Retrieve
- QueryExpression
Patrones problemáticos
Las consultas que incluyen un ColumnSet definido donde la propiedad AllColumns es true
indican a la plataforma que emita un comando de SQL para "SELECT *" en todos los datos físicos incluidos en el plan de consultas. Este escenario debe evitarse siempre que sea posible.
Advertencia
Estos escenarios deben evitarse.
Llamada al método establecedor ColumnSet.AllColumns .
var columns = new ColumnSet(); columns.AllColumns = true; var query = new QueryExpression("account"); query.ColumnSet = columns; var results = service.RetrieveMultiple(query);
Sobrecarga del constructor ColumnSet (valor booleano allColumns).
var query = new QueryExpression("account") { ColumnSet = new ColumnSet(true) }; var results = service.RetrieveMultiple(query);
Sobrecarga del constructor ColumnSet (valor booleano allColumns) para RetrieveRequest.
var entity = service.Retrieve("account", Guid.Parse("bec45132-392a-4617-b935-a64ef04738e4"), new ColumnSet(true));
Información adicional
Las consultas enviadas para recuperar los datos de Dynamics 365 no deben seleccionar todas las columnas. En su lugar, especifique columnas individuales específicas que se deben especificar en la instancia ColumnSet asociada a la consulta. Recuperar todas las columnas de una entidad puede tener un impacto negativo en el rendimiento. Además, puede desencadenar involuntariamente eventos de complementos al recuperar columnas con la que no trabaja y emitir una actualización.
Consulte también
ColumnSet Class
Seleccionar columnas usando QueryExpression
Consultar datos usando QueryExpression
Nota
¿Puede indicarnos sus preferencias de idioma de documentación? Realice una breve encuesta. (tenga en cuenta que esta encuesta está en inglés)
La encuesta durará unos siete minutos. No se recopilan datos personales (declaración de privacidad).