Oharra
Baimena behar duzu orria atzitzeko. Direktorioetan saioa has dezakezu edo haiek alda ditzakezu.
Baimena behar duzu orria atzitzeko. Direktorioak alda ditzakezu.
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
Sin bloqueo
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
FilterExpressioncon sugerencia deunionno está en el filtro de nivel superior, Dataverse transforma la consulta y mueve el filtro con una sugerencia deunional filtro raíz. - Si la sugerencia de
uniontiene 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";
Optimización automática de consultas
No se sorprenda cuando el rendimiento de una consulta lenta mejora sin ningún cambio en su parte. Dataverse supervisa activamente las operaciones de recuperación de datos para mejorar el rendimiento. Cuando una consulta específica con tablas estándar funciona mal, Dataverse podría realizar automáticamente cambios que mejoran el rendimiento de la consulta. Este comportamiento puede hacer que ciertos problemas de rendimiento aparezcan transitorios porque no se pueden reproducir más adelante.
La optimización automática de consultas no requiere ninguna configuración. Está habilitado de forma predeterminada para todos los usuarios.
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