A melhor maneira de lidar com pesquisas de proximidade é começar com algum tipo de aproximação de retângulo delimitador e, a partir daí, ir até uma distância real de grande círculo entre as pessoas.
Contanto que suas latitudes não estejam muito próximas dos pólos, uma aproximação desleixada, mas viável, para a distância entre dois pontos é esta (em SQL):
GREATEST(ABS(lat1-lat2),ABS(long1-long2))
Se você quer ser mais preciso e sabe que só se importa com as pessoas que estão dentro, digamos, 10 km uma da outra, você pode usar uma pesquisa de retângulo delimitador como esta.
WHERE latitude_from_table
BETWEEN latpoint - (10.0 / 111.045)
AND latpoint + (10.0 / 111.045)
AND longitude_from_table
BETWEEN longpoint - (10.0 / (111.045 * COS(RADIANS(latpoint))))
AND longpoint + (10.0 / (111.045 * COS(RADIANS(latpoint))))
Isso funciona porque existem 111,045 km em um grau de latitude. Os termos de cosseno nos limites de longitude explicam o fato de que as linhas de latitude estão mais próximas à medida que você se aproxima dos pólos. Isso permite explorar índices MySQL em suas colunas latitude_from_table e longitude_from_table.
Depois de ter a proximidade da caixa delimitadora, você pode aplicar uma fórmula de distância do grande círculo. Aqui está o fundo sobre isso. http://www.plumislandmedia.net/mysql/haversine-mysql- local-proximo/
Para o tipo de aplicação que você está considerando, o ponto flutuante IEEE-488 de 32 bits é bastante preciso para suas coordenadas. Se os pontos que você está olhando estão muito próximos (menos de um km ou mais), você quer usar a fórmula de Vincenty (http://www.plumislandmedia.net/mysql/vicenty-great-circle-distance-formula/ ) em vez da chamada fórmula haversine mais comum (http://www.plumislandmedia.net/mysql/stored-function-haversine-distance-computation/ ).
Se o seu número de pessoas for muito acima de 300K, você pode considerar usar o esquema de indexação geoespacial do MySQL. Ele só funciona com tabelas MyISAM, mas é muito rápido em fazer pesquisas de retângulo delimitador. Veja aqui. http://www.plumislandmedia.net/mysql/haversine-mysql- local-proximo/