* Última actualización
En 4D 2004, se calcula una formula para cada registro secuencialmente.
4D v11 SQL analiza las formulas de antemano para optimizar las búsquedas. El analizador sintáctico puede identificar partes de la formula que pueden ser optimizadas para reducir las partes secuenciales de la consulta.
Nuestro caso de prueba involucra la georeferenciación (ubicación por grado de latitud y longitud) de clientes. Nos gustaría buscar los clientes que están dentro de 10 kilómetros de un punto en particular. Digamos que tenemos la función, "Distance," que devuelve el número de kilómetros entre dos puntos.
Nota: Estamos utilizando un medio ordinario de medir la distancia en la superficie de la tierra,
Square root(((Abs($1-$3)/Radian)*6378)^2)+(((Abs($2-$4)/Radian)*6378)^2))
Pero puede refinarse con una medida ortodrómica, si usted es una persona exigente.
QUERY BY FORMULA (distance($latitude;$longitude;[customer]latitude;
[customer]longitude)<10)
La búsqueda por fórmula en 10 000 clientes produce 7 registros en 556 milisegundos en 4D v11 SQL… lo cual no es significativamente mejor que en la versión 4D 2004, ya que la búsqueda es secuencial por necesidad y termina barriendo el archivo entero.
Pero si prefiltramos nuestra búsqueda limitándola a la ciudad correspondiente a nuestro punto de partida, obtenemos resultados muy diferentes:
QUERY BY FORMULA([customer];([customer]city=$city) & (distance($latitude;
$longitude;[customer]latitude;[customer]longitude)<10))
En efecto, 4D v11 SQL discierne que puede reducir el perímetro de la búsqueda al tomar ventaja del campo indexado [customer]City. En este caso, nos restringe a 42 registros.
El resto de la expresión es entonces evaluada en los registros dentro de esta selección y esta búsqueda también produce 7 registros, pero en 5 milisegundos – eso es ¡111 veces más rápido!.
La diferencia aquí con 4D 2004 es gigantesca: A diferencia de 4D v11 SQL, 4D 2004 no habría podido crear una lista pre filtrada más corta, para restringir su búsqueda secuencial a la ciudad deseada. Se habrían buscado datos en toda la lista, como en la primera búsqueda.
Los beneficios de rendimiento de QUERY BY FORMULA dependen de, por supuesto, el tipo de petición, pero los desarrolladores pueden contar con el analizador de búsquedas de 4D v11 SQL para buscar automáticamente todas las optimizaciones posibles.