Saltar al contenido

SOQL vs SOSL: ¿cuál usar y cuándo?

Sé libre de divulgar nuestro espacio y códigos con tus amigos, apóyanos para aumentar esta comunidad.

Solución:

Hagamos una comparación rápida de los dos:

Definición

SOQL (lenguaje de consulta de objetos de Salesforce)

Utilice el lenguaje de consulta de objetos de Salesforce (SOQL) para construir cadenas de consulta simples pero potentes en el parámetro queryString en la llamada query (), en las declaraciones de Apex, en los controladores de Visualforce y métodos getter, o en el explorador de esquemas del IDE de Force.com.

De manera similar al comando SELECT en Structured Query Language (SQL), SOQL le permite especificar el objeto de origen (como Cuenta), una lista de campos para recuperar y las condiciones para seleccionar filas en el objeto de origen. SOQL usa la instrucción SELECT combinada con declaraciones de filtrado para devolver conjuntos de datos, que opcionalmente se pueden ordenar.

SOSL (lenguaje de búsqueda de objetos de Salesforce)

Utilice el lenguaje de búsqueda de objetos de Salesforce (SOSL) para construir búsquedas de texto en la llamada search (), en las declaraciones de Apex, en los controladores de Visualforce y métodos de obtención, o en el Explorador de esquemas de Eclipse Toolkit.

A diferencia de SOQL, que solo puede consultar un objeto a la vez, SOSL le permite buscar campos de texto, correo electrónico y teléfono para múltiples objetos simultáneamente.


Velocidad

SOQL y SOSL tienen índices diferentes. Un índice hace que sea mucho más rápido filtrar consultas.

Los índices SOQL son:

  • Primario keys (Campos Id, Nombre y Propietario)
  • Extranjero keys (campos de relación de búsqueda o maestro-detalle)
  • Fechas de auditoría (como LastModifiedDate)
  • Campos personalizados marcados como ID externo o Único.

Los campos que no se pueden indexar en SOQL son:

  • Listas de selección múltiple
  • Campos de moneda en una organización de monedas múltiples
  • Campos de texto largos
  • Algunos campos de fórmula
  • Campos binarios (campos de tipo blob, archivo o texto cifrado).

Tenga en cuenta que se pueden agregar nuevos tipos de datos, generalmente complejos, a Salesforce y los campos de estos tipos pueden no permitir la indexación personalizada.

Los índices SOSL son:

Este es el único punto en el que mi discusión es débil. Simplemente parece que no puedo encontrar la documentación de Salesforce en los índices SOSL. Sé que hay campos estándar como Name que están indexados, pero no puedo encontrar la documentación para todos. Si alguien puede publicar un comentario y / o editar la publicación aquí para incluir esa información, se lo agradecería mucho.


Limites

SOQL y SOSL generalmente tienen las mismas limitaciones, sin embargo, de acuerdo con la documentación de Governer Limit:

**Description**                                                        **Limit**
Total number of SOQL queries issued                                    100
Total number of SOQL queries issued for Batch Apex and future methods  200
Total number of records retrieved by SOQL queries                      50,000
Total number of records retrieved by Database.getQueryLocator          10,000
Total number of SOSL queries issued                                    20
Total number of records retrieved by a single SOSL query               200

Además:

  • Si una consulta SOQL se ejecuta durante más de 120 segundos, Salesforce puede cancelar la solicitud.

Sintaxis

La sintaxis SOQL y la sintaxis SOSL difieren enormemente. Para un descanso verdaderamente profundo, consulte su documentación respectiva. Sin embargo, un ejemplo simple de cada uno es:

SOQL

SELECT Id, Name FROM Account WHERE Name = 'Acme'

Devuelve todas las cuentas en las que el nombre sea exactamente Acme.

SOSL

FIND Joe Smith IN Name Fields RETURNING lead(name, phone)

Busque el nombre Joe Smith en el campo de nombre de un cliente potencial y devuelva el nombre y el número de teléfono.


¿Qué recomienda Salesforce?

Finalmente, echemos un vistazo a lo que Salesforce dice que es la mejor opción (página 11):

Utilice SOQL cuando

  • Sabes en qué objetos o campos residen los datos.
  • Desea recuperar datos de un solo objeto o de varios objetos que están relacionados entre sí.
  • Desea contar el número de registros que cumplen con los criterios especificados.
  • Quiere ordenar los resultados como parte de la consulta.
  • Desea recuperar datos de campos de números, fechas o casillas de verificación.

Utilice SOSL cuando

  • No sabe en qué objeto o campo residen los datos y desea encontrarlos de la manera más eficiente posible.
  • Desea recuperar varios objetos y campos de manera eficiente, y los objetos pueden o no estar relacionados entre sí.
  • Desea recuperar datos de una división en particular en una organización utilizando la función de divisiones y desea encontrarlos de la manera más eficiente posible.

Algunas consideraciones adicionales al usar SOQL o SOSL:

  • Tanto las consultas de búsqueda SOSL como los filtros SOQL WHERE pueden especificar el texto a buscar. Cuando una búsqueda determinada puede usar cualquier idioma, SOSL es generalmente más rápido que SOQL si la expresión de búsqueda usa comodines iniciales o un término CONTAINS.
  • En algunos casos, cuando se utilizan varios filtros WHERE en SOQL, los índices no se pueden utilizar aunque los campos de la cláusula WHERE puedan estar indexados. En esta situación, descomponga la consulta única en varias consultas, cada una con un filtro DONDE y luego combine los resultados.
  • Ejecutar una consulta con un null en un filtro WHERE hace que sea imposible utilizar la indexación. Estas consultas deben escanear toda la base de datos para encontrar los registros adecuados. Diseñe el modelo de datos para que no se base en nulos como valores de campo válidos.
  • Si se utilizan valores dinámicos para el campo DONDE y null los valores se pueden pasar, no deje que la consulta se ejecute para determinar que no hay registros; en su lugar, compruebe los nulos y evite la consulta si es necesario.

Al diseñar interfaces de usuario de búsqueda / consulta personalizadas, es importante seguir estas pautas:

  • Mantenga el número de campos / buscados al mínimo. En entornos LDV, la consulta de una gran cantidad de campos en la misma consulta puede resultar difícil de ajustar el rendimiento.
  • Determine si SOQL o SOSL o una combinación es apropiado para la búsqueda.

¿Conclusión?

En pocas palabras, ambos lenguajes pueden ser muy útiles. Para citar una discusión de los foros de discusión de Force.com:

SimonF

SOSL puede buscar múltiples tipos de objetos, lo que requiere múltiples consultas separadas en SOQL, además, todos los campos relevantes ya están indexados en texto para SOSL, pero los mismos campos no tienen índices de base de datos, por lo que las consultas SOQL contra ellos serán más lentas. Si tiene muchos datos, estas diferencias serán mucho más evidentes.

hemm

SOQL debe usarse cuando necesite precisión en lo que se devuelve. Dado que la funcionalidad de Salesforce está tan impulsada por los procesos comerciales, la precisión suele ser muy importante y es por eso que SOQL se usa con más frecuencia. También se puede utilizar para crear una consulta similar a una búsqueda, pero probablemente esté destinada más a consultas precisas.

SOSL se puede usar cuando la precisión no es tan importante y cuando se encuentra construyendo una cláusula WHERE loca en una consulta SOQL. Podría ser más fácil usar SOSL. SOSL puede brindarle un poco más de seguridad de que los registros que desea que se devuelvan serán incluso si termina con más datos para examinar. Con SOQL, va campo por campo para coincidir con los criterios y puede excluir los registros que no desea excluir. Además, si agrega nuevos campos al sistema, SOSL los recogerá y los buscará, mientras que SOQL no lo hará.

Use su criterio, pero no descarte SOSL o SOQL, ¡use ambos!

Nota: He vuelto a publicar esta pregunta y respuesta en mi sitio web. Se puede encontrar aquí.

Otro comentario debería ser: Utilice SOSL si necesita realizar consultas en campos cifrados.

SOQL seleccione id, nombre, correo electrónico del contacto donde Correo electrónico =: ‘[email protected]’no funcionará en campos cifrados

SOSL Find ‘[email protected]’en los campos de correo electrónico El contacto que regresa (id, nombre, correo electrónico) hará el trabajo

El único inconveniente es que todavía no hay un método a granel disponible.

Si entiendes que ha resultado de utilidad nuestro artículo, sería de mucha ayuda si lo compartieras con el resto programadores de este modo contrubuyes a difundir esta información.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : / /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *