Compartir a través de


Optimizar el rendimiento utilizando QueryExpression

Para obtener instrucciones sobre los aspectos generales que se deben evitar al redactar consultas de Dataverse, consulte Antipatrones de consulta. Las secciones siguientes son específicas de QueryExpression.

Sugerencias de consulta

Importante

Aplique estas opciones únicamente cuando lo recomiende el soporte técnico de Microsoft. El uso incorrecto de estas opciones puede dañar el rendimiento de una consulta.

Microsoft SQL Server admite muchas sugerencias de consulta para optimizar las consultas. QueryExpression admite sugerencias de consulta y puede pasar estas opciones de consulta a SQL Server usando la propiedad QueryExpression.QueryHints.

Opción de consulta Sugerencia de SQL Server
ForceOrder Forzar orden
DisableRowGoal Sugerencia: DISABLE_OPTIMIZER_ROWGOAL
EnableOptimizerHotfixes Sugerencia: ENABLE_QUERY_OPTIMIZER_HOTFIXES
LoopJoin Combinación de bucle
MergeJoin Combinación de mezcla
HashJoin Combinación hash
NO_PERFORMANCE_SPOOL NO_PERFORMANCE_SPOOL
ENABLE_HIST_AMENDMENT_FOR_ASC_KEYS Sugerencia: ENABLE_HIST_AMENDMENT_FOR_ASC_KEYS

Más información: Sugerencias (Transact-SQL) - Consulta

No lock

En versiones anteriores, la propiedad QueryExpression.NoLock se usaba para evitar bloqueos compartidos en registros. Ya no es necesario incluir esta propiedad

Sugerencia de combinación

Puede mejorar el rendimiento al agregar un FilterExpression que establece el ConditionExpression para columnas en diferentes tablas configurando la propiedad FilterExpression.FilterHint en union. Pero existen algunas restricciones:

  • FilterExpression.FilterOperator debe usar LogicalOperator.Or.
  • Cada consulta puede contener sólo una sugerencia de union.
  • Si una FilterExpression con sugerencia de union no está en el filtro de nivel superior, Dataverse transforma la consulta y mueve el filtro con una sugerencia de union al filtro raíz.
  • Si la sugerencia de union tiene más de tres niveles de profundidad, se ignora.

El siguiente ejemplo establece un filtro con la sugerencia de union en la columna telephone1 para las tablas cuenta y contacto.

QueryExpression query = new("email")
{
   ColumnSet = new ColumnSet("activityid", "subject"),
   Criteria = new FilterExpression(LogicalOperator.And)
   {
      Conditions = {
         {
            new ConditionExpression(
               attributeName:"subject",
               conditionOperator:ConditionOperator.Like,
               value: "Alert:%")
         },
         {
            new ConditionExpression(
               attributeName:"statecode",
               conditionOperator:ConditionOperator.Equal,
               value: 0)
         }
      },
      Filters = {
         {
            new FilterExpression(LogicalOperator.Or){
               FilterHint = "union",
               Conditions = {
                  {
                     new ConditionExpression(
                        attributeName:"telephone1",
                        conditionOperator:ConditionOperator.Equal,
                        value: "555-123-4567"){
                           EntityName = "ac"
                        }
                  },
                  {
                     new ConditionExpression(
                        attributeName:"telephone1",
                        conditionOperator:ConditionOperator.Equal,
                        value: "555-123-4567"){
                           EntityName = "co"
                        }
                  }
               }
            }
         }
      }
   }
};        

LinkEntity linkToAccount = query.AddLink(
      linkToEntityName: "account",
      linkFromAttributeName: "regardingobjectid",
      linkToAttributeName: "accountid",
      joinOperator: JoinOperator.LeftOuter);
linkToAccount.EntityAlias = "ac";

LinkEntity linkToContact = query.AddLink(
      linkToEntityName: "contact",
      linkFromAttributeName: "regardingobjectid",
      linkToAttributeName: "contactid",
      joinOperator: JoinOperator.LeftOuter);
linkToContact.EntityAlias = "co";

Consulte también

Consultar datos usando QueryExpression
Seleccionar columnas usando QueryExpression
Unir tablas usando QueryExpression
Ordenar filas usando QueryExpression
Filtrar filas usando QueryExpression
Resultados de la página usando QueryExpression
Agregar datos usando QueryExpression
Contar filas usando QueryExpression
Antipatrones de consulta