Geolocalización MySQL Query

Ejecuto una red social basada en geolocalización. Los miembros pueden ver a otros miembros según lo cerca que estén.

En este momento mi consulta de MySQL se ve como:

$lat_min = $geo['user_lat'] - 5;
$lat_max = $geo['user_lat'] + 5;
$long_min = $geo['user_long'] - 5;
$long_max = $geo['user_long'] + 5;    

$members_query = "SELECT " . $fields . " FROM members WHERE (user_lat BETWEEN " . $lat_min . " AND " . $lat_max . " AND user_long BETWEEN " . $long_min . " AND " . $long_max . ") OR (gc_lat BETWEEN " . $lat_min . " AND " . $lat_max . " AND gc_long BETWEEN " . $long_min . " AND " . $long_max . ")";

user_lat yuser_long son coordenadas basadas en la geolocalización si lo tienen activado en su navegador.gc_lat ygc_long y coordenadas en función de su dirección IP. Estas filas están todas indexadas en la base de datos. Estoy atrayendo a todos los miembros dentro de 10 grados.

El problema es que esta consulta tarda aproximadamente 2 segundos en realizarse para nuestros más de 250,000 miembros, y queremos que el sitio se amplíe.

INTENTO 2: He intentado asignar cuadrantes a cada miembro, p. "36x-99" ... Estoy redondeando la latitud y longitud al múltiplo de 3 más cercano para etiquetar el cuadrante, y luego solo extraigo los cuadrantes dentro de los 12 grados del cuadrante en el que se encuentra el miembro.

$members_query = "SELECT " . $fields . " FROM members WHERE quadrant IN ('36x-99', '33x-99', '30x-99', ...);

Esto no me dio una diferencia notable en la velocidad de consulta.

¿Alguien tiene alguna idea de lo que debo hacer? Necesito encontrar una solución que permita que el sitio se amplíe mejor.

Respuestas a la pregunta(1)

Su respuesta a la pregunta