Optimizaciones para organizaciones de Salesforce con grandes volúmenes de datos (Parte 2)
Optimiza el rendimiento de tu organización de Salesforce con consultas eficientes, índices y selectividad. Parte 2 de nuestra serie de 4 partes sobre la gestión de grandes volúmenes de datos.
Por Randalyn Hill-Coffer·Revisado por el equipo de Blue Canvas··10 min de lectura
En este artículo, profundizaremos en los detalles de cómo escribir consultas eficaces en Salesforce utilizando el lenguaje de consulta de objetos de Salesforce (SOQL) y el lenguaje de búsqueda de objetos de Salesforce (SOSL). Al examinar casos de uso específicos, ventajas, desventajas y consejos prácticos, aprenderás a usar estos dos lenguajes de consulta de Salesforce y comprenderás la importancia de los índices, la selectividad y la función de características como las tablas reducidas y el cálculo diferido del acceso compartido.
Estas son nuestras 5 conclusiones clave:
- SOQL vs. SOSL: SOQL es óptimo cuando conoces los objetos y los campos, mientras que SOSL es ideal para búsquedas amplias basadas en texto.
- Indexación en SOQL: La indexación en SOQL es limitada; no todos los campos pueden indexarse, pero admite claves primarias, campos personalizados, campos de auditoría del sistema y claves externas.
- Función de cálculo diferido del acceso compartido: Esta función puede ayudarte a gestionar las reglas de acceso compartido durante cambios importantes de configuración en tu organización.
- Tablas reducidas: Las tablas reducidas disminuyen los tiempos de procesamiento de los campos consultados con frecuencia, aunque requieren actualizaciones manuales cuando se realizan cambios.
- Uso de la selectividad y los índices: Haz que tus consultas sean selectivas y específicas para mejorar el rendimiento, y considera crear índices personalizados con la ayuda de Salesforce para obtener resultados óptimos.
Esta es la Parte II de una serie de cuatro partes sobre técnicas de optimización para organizaciones de Salesforce con grandes volúmenes de datos. Puedes encontrar la Parte I de la serie aquí.
Cómo escribir mejores consultas en Salesforce
Ya sea que uses SOQL o SOSL, si filtras un conjunto de registros, es fundamental realizar consultas selectivas. Para decidir qué lenguaje de consulta usar en Salesforce, el enfoque general es que, si sabes qué objeto y qué campos buscas, puedes usar SOQL. Tanto SOQL como SOSL tienen distintos casos de uso, con ventajas y desventajas según el escenario.
Los índices de SOQL son principalmente claves primarias, pero también pueden ser campos personalizados (con valores únicos) o campos de auditoría del sistema (CreatedDate). También pueden ser claves externas (campos de relación maestro-detalle). Por ejemplo, no puedes indexar campos de lista de selección múltiple, campos de moneda (si está habilitada la opción de múltiples monedas), campos de texto largo ni campos binarios. Además, puedes ejecutar consultas para ver el conteo de objetos secundarios en SOQL. ¡Muy útil!
El lenguaje de búsqueda de objetos de Salesforce (SOSL) es menos conocido entre los desarrolladores y se utiliza para crear consultas de búsqueda basadas en texto sobre el índice de búsqueda. El motor de búsqueda busca coincidencias en un máximo de 2,000 registros. Con una sola consulta, puedes buscar en campos de texto, correo electrónico y teléfono de varios objetos a los que tengas acceso, incluidos los objetos personalizados, mediante llamadas SOAP/REST, controladores y métodos de Apex y Visualforce, y más.
SOSL también te permite buscar en campos de texto, correo electrónico y teléfono al mismo tiempo, lo que lo hace más eficiente al gestionar consultas de grandes volúmenes de datos. Esto es especialmente útil si no sabes qué objetos contienen los valores que buscas. Antes pensaba que SOSL siempre tenía límites de ejecución más altos que SOQL, pero no es así. Si necesitas obtener más de 2,000 registros, debes usar SOQL, cuyo límite de registros por transacción en Apex es de 50,000.
Aquí tienes algunos consejos adicionales:
- SOSL puede dividir en tokens varios términos dentro de un campo (por ejemplo, varias palabras separadas por espacios).
- Limita el alcance a objetos específicos, filas que pertenecen al usuario y filas dentro de una división (cuando corresponda).
- Los campos de nombre, teléfono, texto y lista de selección están indexados y son adecuados para SOSL.
- En SOSL, las búsquedas en el feed de Chatter no se ven afectadas por el alcance de tu búsqueda, y sus resultados incluyen coincidencias en todos los objetos.
Para evitar errores de tiempo de espera en las consultas SOQL, intenta reducir el alcance de la consulta y usar filtros selectivos. Considera usar la Bulk API y agregar una cláusula LIMIT (empezando con 100,000 registros) a tus consultas. Si usas Apex por lotes para tus consultas, usa el encadenamiento para obtener conjuntos de registros (con LIMIT) o considera mover la lógica de filtrado al método execute.

Cálculo diferido del acceso compartido de Salesforce
En algunas circunstancias, puede ser conveniente usar una función llamada Cálculo diferido de acceso compartido, que permite a los usuarios diferir el procesamiento de las reglas de acceso compartido cuando se agregan o actualizan usuarios y cambia la jerarquía de roles de la organización.
El administrador de una organización puede usar el permiso de cálculo diferido de acceso compartido para suspender y reanudar los cálculos de acceso compartido, y para gestionar dos procesos: el cálculo de pertenencia a grupos y el cálculo de reglas de acceso compartido. El administrador puede suspender estos cálculos al realizar una gran cantidad de cambios de configuración que podrían generar evaluaciones muy largas de las reglas de acceso compartido o tiempos de espera agotados, y reanudarlos durante un periodo de mantenimiento de la organización. Esta postergación puede ayudar a los usuarios a procesar rápidamente una gran cantidad de cambios de configuración relacionados con el acceso compartido durante el horario laboral y dejar que el proceso de recálculo se ejecute por la noche entre días hábiles o durante un fin de semana.
Tablas reducidas de Salesforce
Las tablas reducidas se pueden crear en objetos personalizados y en los objetos Account, Contact, Opportunity, Lead y Case. Aunque pueden mejorar el rendimiento, tienen un límite de 100 objetos y no pueden contener campos de otros objetos. De forma predeterminada, solo se pueden usar en sandboxes de copia completa. Para usar tablas reducidas, debes contactar al soporte al cliente de Salesforce.
Salesforce mantiene tablas separadas a nivel de base de datos para los campos estándar y personalizados. Normalmente, se requiere una unión de base de datos al consultar estos campos. Puedes crear tablas reducidas para los campos consultados con frecuencia y disminuir los tiempos de procesamiento. Sin embargo, esto solo se aplica a ciertas operaciones de solo lectura. Si cambias la consulta que se ejecuta y agregas nuevas tablas, el soporte al cliente de Salesforce también debe actualizar manualmente las definiciones de tus tablas reducidas. Salesforce también sincroniza continuamente las tablas reducidas y las tablas de origen para evitar uniones de base de datos y disminuir los tiempos de procesamiento. Las tablas reducidas son especialmente útiles para los reportes, ya que estos son operaciones de solo lectura, y obtendrás resultados mucho mejores si tienes más de un millón de registros. Las tablas reducidas también se pueden usar con datos cifrados.
Selectividad de consultas e índices
Un primer paso sencillo es aprovechar los índices estándar de la plataforma haciendo que nuestras consultas sean lo más selectivas y específicas posible.
Considera una consulta sencilla con una cláusula WHERE como la siguiente:
SELECT Id, Name FROM Opportunity WHERE Stagename = 'Closed Won'
Un desarrollador o administrador con experiencia puede obtener la información necesaria sobre el conjunto de datos con el que trabajará. Esto puede ser más eficaz que los reportes, especialmente cuando hay grandes volúmenes de datos. Por ejemplo, si necesitas ver la cantidad de oportunidades agrupadas por el nombre de su etapa, puedes usar GROUP BY ROLLUP para obtener la información necesaria. También devolverá la cantidad total de registros en la fila con valor nulo.
SELECT Stagename, COUNT(id) FROM Opportunity GROUP BY ROLLUP (Stagename)

También puedes usar condiciones de filtro más complejas. Para los filtros que combinan dos o más condiciones (mediante AND), el optimizador de consultas considera que el filtro general es selectivo cuando ambas condiciones de filtro abarcan menos de 150,000 registros.
Si una de las condiciones devuelve más de 250,000 registros, el filtro general puede hacerse selectivo si ambas condiciones se superponen y devuelven menos de 150,000 registros, siempre que cada condición de filtro corresponda a menos de 300,000 registros. Para las condiciones OR, cada filtro debe cumplir los umbrales individualmente. (Más adelante hablaremos en detalle sobre los umbrales de índices).
Para usar búsquedas indexadas en consultas SOQL con varios filtros, intenta dividir la consulta en tantas partes como filtros tenga y unir los resultados por separado.

Además de respetar el límite de ejecución de 50,000 registros devueltos en una transacción, debes prestar atención a los registros eliminados de tu organización. También pueden afectar el rendimiento de tus consultas. Puedes usar el indicador isDeleted para filtrar estos reportes, ya que este campo está disponible en todos los objetos estándar y personalizados, o vaciar la papelera de reciclaje con frecuencia. Además, si usas Workbench, selecciona Excluir en la lista de opciones de registros eliminados y archivados disponible.
Índice personalizado de Salesforce: explicación
También podemos aprovechar los índices estándar que operan sobre los campos del sistema. Si tu condición de filtro incluye un campo personalizado, trabaja con el soporte al cliente de Salesforce para crear un índice personalizado en el campo que usa tu filtro. No todos los campos admiten índices; por ejemplo, los campos de fórmula no deterministas.

Salesforce admite índices personalizados en campos personalizados, excepto en listas de selección múltiple, algunas áreas de texto, campos de fórmula no deterministas y campos de texto cifrado. Los identificadores externos se pueden indexar; sin embargo, solo los campos de numeración automática, correo electrónico, número y texto se pueden configurar como identificadores externos.
El objetivo de usar índices es permitir que los motores de búsqueda eviten los escaneos de tablas, en los que el motor busca en todos los registros de la organización correspondientes al objeto consultado. Los índices pueden basarse en el acceso compartido, en optimizaciones internas estándar de Salesforce o en índices personalizados creados en campos personalizados. También debes evitar usar comodín También debes considerar evitar los valores NULL y las consultas de campos de fórmula, ya que estos campos se calculan durante la ejecución y los valores NULL provocan un escaneo completo de la tabla. Aquí tienes un ejemplo:
String stage = NULL;
List<Opportunity> = [SELECT Name FROM Opportunity WHERE Stagename=: stage];
Para diagnosticar problemas con tus consultas, también puedes usar la Herramienta de planes de consulta. Ofrece información basada en distintos planes de consulta, indica qué filtros se deben indexar y muestra el costo de usar estas técnicas en comparación con un escaneo completo de la tabla. Aquí tienes una descripción general de la selectividad de índices:

Umbrales de índices
Considera esta consulta:
SELECT * FROM Account WHERE Account_Type__c = 'Large'
La plataforma usa un optimizador de consultas para mantener estadísticas de las búsquedas realizadas e intenta determinar si debe usar índices estándar o los índices personalizados creados. Para la consulta anterior, si la cantidad de registros que cumplen estos criterios es inferior al umbral del índice personalizado, usará un índice estándar en lugar de uno personalizado. El umbral es el 10% del total de registros del objeto o si la cantidad de registros supera los 333,333.
¡En la siguiente publicación continuaremos con un análisis detallado de los índices personalizados y consejos para mejorar el rendimiento en Salesforce según cada caso!
Mejora del rendimiento de Salesforce para grandes volúmenes de datos
Optimizar el rendimiento de una organización de Salesforce con grandes volúmenes de datos es fundamental para lograr operaciones eficientes y una buena experiencia de usuario. En este artículo, exploramos los detalles de cómo escribir consultas eficaces con SOQL y SOSL, además de comprender la importancia de los índices, la selectividad y funciones como las tablas reducidas y el cálculo diferido de acceso compartido. Al aprovechar la selectividad de consultas, usar índices y tener en cuenta los registros eliminados, puedes mejorar el rendimiento de las consultas y minimizar los tiempos de procesamiento.
Para profundizar en las técnicas avanzadas de optimización y obtener una visión integral, no te pierdas la parte 3 de nuestra serie. En ese artículo, profundizaremos en los índices personalizados y ofreceremos consejos según cada caso para mejorar aún más el rendimiento en Salesforce. ¡No te pierdas la oportunidad de aprovechar todo el potencial de tu organización de Salesforce!
Preguntas frecuentes
P: ¿Cuál es el propósito de la parte 2 de la serie de cuatro partes sobre la optimización de organizaciones de Salesforce con un gran volumen de datos?
R: La parte 2 de la serie se centra en gestionar y mejorar el rendimiento en un entorno de Salesforce con uso intensivo de datos. Para ello, explica diversas técnicas, como escribir mejores consultas, diferir los cálculos de acceso compartido, usar tablas reducidas y comprender los detalles de la selectividad de consultas y los índices.
P: ¿Cuáles son los puntos clave de la parte 2?
R: Los puntos clave incluyen aprender a escribir mejores consultas con Salesforce Object Query Language (SOQL) y Salesforce Object Search Language (SOSL), diferir los cálculos de acceso compartido para mejorar el rendimiento durante cambios importantes de configuración, usar tablas reducidas para disminuir los tiempos de procesamiento y aprovechar los índices estándar de la plataforma para crear consultas más selectivas y específicas.
P: ¿Qué son las tablas reducidas y cómo pueden mejorar el rendimiento de Salesforce?
R: Las tablas reducidas son tablas especiales que pueden mejorar el rendimiento al almacenar campos consultados con frecuencia y disminuir los tiempos de procesamiento. Tienen limitaciones y requieren la intervención del soporte al cliente de Salesforce para su creación y gestión. Sin embargo, se pueden usar para acelerar consultas en grandes conjuntos de datos y son especialmente útiles para reportes en entornos con uso intensivo de datos.
P: ¿Qué es el cálculo diferido de acceso compartido en Salesforce?
R: El cálculo diferido de acceso compartido es una función que permite a los usuarios diferir el procesamiento de las reglas de acceso compartido cuando se agregan o actualizan usuarios y cuando cambia la jerarquía de roles de la organización de Salesforce. Esto mejora el rendimiento durante cambios importantes de configuración.
P: ¿Cuál es la diferencia entre SOQL y SOSL?
R: SOQL es útil cuando conoces el objeto y los campos específicos que buscas, mientras que SOSL puede buscar en varios objetos y campos simultáneamente. Sin embargo, cada uno tiene distintos casos de uso, fortalezas y limitaciones según el escenario.
P: ¿Cómo funcionan los índices personalizados de Salesforce?
R: Salesforce admite índices personalizados en campos personalizados, con algunas excepciones. Estos índices aceleran la recuperación de datos y mejoran el rendimiento de las consultas. Sin embargo, usarlos requiere coordinación con el soporte al cliente de Salesforce.
P: ¿Qué se entiende por selectividad de consultas e índices en Salesforce?
R: La selectividad de consultas consiste en hacer que las consultas sean lo más específicas posible para aprovechar los índices estándar de la plataforma. Implica usar condiciones que apunten a un subconjunto específico de datos, lo que permite que el sistema use índices para recuperar los datos de forma más eficiente.
P: ¿Qué importancia tienen los umbrales de índices en Salesforce?
R: Los umbrales de índices determinan cómo el optimizador de consultas de Salesforce decide si usar índices estándar o personalizados según la cantidad de registros que coinciden con una consulta. Comprender estos umbrales puede ayudarte a optimizar el rendimiento de las consultas.
P: ¿De qué trata la siguiente parte de la serie?
A: Parte 3 de la serie profundizará en los índices personalizados y ofrecerá consejos para cada caso que te ayudarán a mejorar aún más el rendimiento en Salesforce.
P: ¿Cuál es el objetivo final de esta serie sobre cómo optimizar organizaciones de Salesforce con grandes volúmenes de datos?
R: El objetivo final de esta serie es ofrecer una guía completa para mejorar el rendimiento de una organización de Salesforce con grandes volúmenes de datos. Se busca garantizar operaciones eficientes y una buena experiencia de usuario mediante la selectividad de las consultas, el uso de índices y la comprensión de funciones que mejoran el rendimiento, como las tablas reducidas y el cálculo diferido de acceso compartido.



