Loading

Preguntas más frecuentes sobre la herramienta Planificación de consultas de Developer Console

Fecha de publicación: Aug 30, 2024
Descripción

La herramienta Planificación de consultas en Developer Console puede ayudar a acelerar las consultas SOQL realizadas sobre volúmenes grandes. Utilice la herramienta Planificación de consultas para optimizar y acelerar consultas realizadas sobre volúmenes grandes.

 

Activar y utilizar la herramienta Planificación de consultas

  1. En Developer Console, haga clic en Help | Preferences (Ayuda | Preferencias)
  2. Establezca Enable Query Plan (Activar plan de consultas) en TRUE.


Una vez activada en Developer Console, puede acceder a la herramienta Planificación de consultas en la ficha Query Editor (Editor de consultas) de la consola.

Para utilizar la herramienta Planificación de consultas, solo tiene que introducir una consulta en Query Editor y pulsar Query Plan (Planificación de consultas) para mostrar todas las operaciones de consultas y el coste de cada una para el SOQL proporcionado.

 
Solución

Motivos para utilizar la herramienta Planificación de consultas

Utilice esta herramienta para comprobar la Planificación de consultas para cualquier consulta que se ejecute lentamente. Le proporcionará la perspectiva de los planes diferentes y si tiene algunos de los filtros indexados, proporcione el coste del uso del índice comparado con una exploración de tabla completa.

Si el coste de la exploración de tabla es inferior al índice, y la consulta está agotando el tiempo de espera, tendrá que realizar más análisis sobre el uso de otros filtros para mejorar la selectividad, o si tiene otro filtro selectivo en esa consulta que no esté indexado pero que sea candidato para uno.
 

Determine si un filtro es selectivo:

  • Determine si tiene un índice.
  • Si el filtro está en un campo estándar, tendrá un índice si es una clave principal (Id., Nombre, OwnerId), una clave externa (CreatedById, LastModifiedById, consulta, relación principal-detalle), y un campo de auditoría (CreatedDate, SystemModstamp).
  • Los campos externos tendrán un índice si se marcaron como Exclusivo o Id. externo.
  • Si el filtro no tiene un índice, no se tendrá en cuenta para la optimización.
  • Si el filtro tiene un índice, determine cuántos registros devolvería:
  • Para un índice estándar, el umbral es del 30 por ciento del primer millón de registros dirigidos y el 15 por ciento de todos los registros después de ese primer millón. Además, el umbral de selectividad para un índice estándar tiene un máximo de 1 millón de registros dirigidos en total, que podría alcanzar solo si tuviera más de 5,6 millones de registros en total.
  • Para un índice personalizado, el umbral de selectividad es del 10 por ciento del primer millón de registros dirigidos y el 5 por ciento de todos los registros después de ese primer millón. Además, el umbral de selectividad para un índice personalizado tiene un máximo de 333.333 registros dirigidos, que podría alcanzar solo si tuviera más de 5,6 millones de registros.
  • Si el filtro supera el umbral, no se tendrá en cuenta para la optimización.
  • Si el filtro no supera el umbral, este filtro ES selectivo, y el optimizador de consultas lo tendrá en cuenta para la optimización.
 

¿Qué significa?

La herramienta Planificación de consultas mostrará una lista de los planes disponibles que nuestro optimizador de consultas puede utilizar para la consulta proporcionada, que se dispondrá por coste ascendente.

Cada plan contendrá información sobre Cardinalidad, Tipo de operación, Coste, Tipo de sObject, entre otra. Cada plan tiene un Tipo de operación principal, como por ejemplo Índice de campos o Exploración de tabla completa. El plan con el coste inferior es el plan que se utiliza para dirigir la ejecución de la consulta.

 
Cardinalidad
Campos
Tipo de operación principal
Coste
Cardinalidad de sObject
Tipo de sObject
El número de registros estimado que el tipo de operación líder devolvería.
Por ejemplo, el número de registros devueltos si se utiliza una tabla de índice.
 
Los campos indexados utilizados por el optimizador de consultas. Si el tipo de operación principal es Índice, el valor de los campos es Índice. En caso contrario, el valor de los campos es nulo.
El tipo de operación principal que Salesforce utilizará para optimizar la consulta.
  • Index - La consulta utilizará un índice sobre el objeto consultado.
  • Sharing - La consulta utilizará un índice basado en las reglas de colaboración asociadas con el usuario que está ejecutando la consulta. Si hay reglas de colaboración que limitan a qué registros puede acceder ese usuario, Salesforce puede utilizar esas reglas para optimizar la consulta.
  • TableScan - La consulta explorará todos los registros del objeto consultado.
  • Other - La consulta utilizará optimizaciones internas de Salesforce.
El coste de la consulta comparado con el umbral de selectividad del optimizador de consultas de Force.com. Los valores por encima de 1 significan que la consulta no será selectiva.
El recuento aproximado de registros para el objeto consultado.
El nombre de lo consultado.
 

 

¿Cómo se determina el coste?

Cada plan tiene su propio valor de coste. El valor del coste se deriva de los datos estadísticos más recientes recopilados desde la base de datos (DB) en la tabla y los valores. El plan con el coste inferior será el plan utilizado. Si el coste está por encima de 1, significa que la consulta no será selectiva.

 

El campo indexado no aparece en la lista de planes

Si la consulta que proporcionó contiene un campo indexado en los filtros, se mostrará el plan para ese campo solo si está utilizando una operación admitida sobre ese campo.

A continuación aparece una lista de operaciones no admitidas:

  • El índice personalizado no se utilizará nunca cuando se estén realizando comparaciones con un operador como "NOT EQUAL TO" (No es igual a)
  • El índice personalizado no se utilizará nunca cuando se estén realizando comparaciones con un valor nulo como "Name = "''
  • Los comodines '%' iniciales son operadores ineficientes que también hacen que las condiciones del filtro no sean selectivas
  • Cuando se utiliza una comparación OR, todos los filtros deberán estar indexado y por debajo del umbral del 10%. . Si tiene un campo no indexado o uno que esté por encima del 10%, no se mostrará el plan.

 

¿Muestra la herramienta Planificación de consultas candidatos de índices o campos que puedan indexarse?

La herramienta Planificación de consultas solo mostrará datos estadísticos de campos indexados en la sección del plan, no los campos que podrían indexarse. Esta herramienta no proporciona información sobre campos que puedan indexarse.

Consulte Cómo hacer mi consulta SOQL selectiva sobre la determinación de qué campos pueden indexarse.

 

Ejemplos y cómo interpretar resultados de Planificación de consultas 

Los siguientes ejemplos utilizan 2 campos indexados. Una casilla de verificación (InActiveAcc__c) y una lista de selección (Account_Hierarchy__c) en el sObject Account (Cuenta).

Nota: Podrá encontrar más consultas de ejemplos en la publicación original sobre el Piloto de parámetros de comentarios de recursos de consultas desde la que evolucionó esta nueva herramienta de Developer Console.

 

Ejemplo de consulta 1

SELECT count() FROM Account WHERE Account_Hierarchy__c = 'Parent'


Escenario: Un campo indexado con una variable de enlace selectiva

El campo “Account_Hierarchy__c” está indexado, de modo que se tiene en cuenta para un plan con el Tipo de operación principal como “Index”. El campo indexado tiene un coste inferior a TableScan, de modo que el índice se utilizará por parte del optimizador de consultas para esta consulta en el objeto Account de 50.088 filas.

 

Ejemplo de consulta 2

SELECT count() FROM Account WHERE InActiveAcc__c = true AND Account_Hierarchy__c = 'Parent'


Escenario: 2 campos indexados, 1 selectivo

¿Qué ocurre si más de un filtro sencillo es selectivo? Si hay más de un filtro selectivo, el optimizador de consultas elegirá el que tenga el coste inferior para dirigir el plan de ejecución de la consulta.

 

Ejemplo de consulta 3

SELECT count() FROM Account WHERE InActiveAcc__c = true AND Account_Hierarchy__c != 'Parent' **NOTA: Se está utilizando una operación no admitida en el índice**


Escenario: 2 campos indexados, 1 selectivo PERO utilizando una operación no admitida

El índice en Account_Hierarchy__c no se utiliza ni se tiene en cuenta debido a la operación no admitida “!=”. Tenga en cuenta también que se utilizará InActiveAcc__c pero tiene un coste superior a 1. Como se mencionó anteriormente, el filtro no es selectivo pero se utilizará.

 

Ejemplo de consulta 4

SELECT count() FROM Account WHERE Account_Hierarchy__c = 'Child'


Escenario: 1 campo indexado utilizando una variable de enlace no selectiva (>10% del recuento de filas del sObject)

Aquí, el campo indexado Account_Hierarchy__c muestra un coste mucho mayor que una exploración de tabla completa. El motivo de ello es que el índice no es selectivo con la variable de enlace "Child", lo que da como resultado más del 10% de la tabla completa. La base de datos ejecutará una exploración de tabla completa para esta consulta que, dependiendo del tamaño de la tabla completa, podría dar como resultado un rendimiento deficiente.
Número del artículo de conocimiento

000386864

 
Cargando
Salesforce Help | Article