* Última atualização
Buscar por fórmula - Independente
Em 4D 2004, é calculada uma fórmula para cada registro sequencialmente.
4D v11 SQL analisa as fórmulas de antemão para otimizar as buscas. O analisador sintático pode identificar partes da fórmula que possam ser otimizadas para reduzir as partes seqüenciais da consulta.
Nosso caso de teste envolve a georeferenciação (localização por grau de latitude e longitude) de clientes. Gostaríamos de buscar os clientes que estão em um raio de 10 km de um ponto em particular. Digamos que temos a função., “Distance,” que devolve o número de km entre dois pontos.
Obs: Estamos utilizando um meio comum para medir a distância na superfície da terra.
Square root(((Abs($1-$3)/Radian)*6378)^2)+(((Abs($2-$4)/Radian)*6378)^2))
Mas pode ser refinada com uma medida ortodrômica, se você for exigente.
QUERY BY FORMULA (distance($latitude;$longitude;[customer]latitude;
[customer]longitude)<10)
A busca por uma fórmula em 10 000 clientes produz 7 registros em 556 milisegundos em 4D v11 SQL… o qual é significativamente melhor que na versão 4D 2004, já que a busca é seqüencial por necessidade e termina varrendo o arquivo inteiro.
Mas se pré-filtramos nossa busca limitando-a a cidade correspondente a nosso ponto de partida, obtemos resultados muito diferentes:
QUERY BY FORMULA([customer];([customer]city=$city) & (distance($latitude;
$longitude;[customer]latitude;[customer]longitude)<10))
Na prática, 4D v11 SQL discerne que pode reduzir o perímetro da busca ao ter vantagem com o campo indexado [customer]City. Neste caso, nos restringe a 42 registros.
O resto da expressão é então avaliada nos registros dentro dessa seleção e esta busca também produz 7 registro, mas em 5 milisegundos – ou seja, 111 vezes mais rápido!
A diferença aqui com 4D 2004 é gigantesca: Diferente de 4D v11 SQL, 4D 2004 não poderia ter criado uma lista pré-filtrada mais curta para restringir sua busca seqüencial à cidade desejada. Haveria buscado dados em toda a lista, como na primeira busca.
Os benefícios de rendimento de QUERY BY FORMULA dependem do, obviamente, tipo de requisição, mas os desenvolvedores podem contar com o analisador de buscas de 4D v11 SQL para buscar automaticamente todas as otimizações possíveis.