MYSQL Geo Search con rendimiento a distancia

Tengo una declaración de selección de mysql para una búsqueda en mi sitio web que tiene problemas de rendimiento cuando el sitio está realmente ocupado. La siguiente consulta busca anuncios de una tabla con más de 100k registros, dentro de las 25 millas de los lat y lon dados y ordenados por distancia. El número de millas puede diferir según lo seleccione el usuario.

El problema es que creo que es lento porque realiza los cálculos de todos los registros de la tabla en lugar de los que están a 25 millas del lat y lon. ¿Es posible enmendar esta consulta para que donde la cláusula seleccione solo anuncios dentro de 25 millas? He leído sobre los recuadros delimitadores y los índices espaciales, pero no estoy seguro de cómo aplicarlos a esta consulta, ¿necesito agregar una cláusula where que seleccione registros de 25 millas de radio de lat y lon, cómo hago esto?

SELECT 
    adverts.*, 
    round(sqrt((((adverts.latitude - '53.410778') * (adverts.latitude - '53.410778')) * 69.1 * 69.1) + ((adverts.longitude - '-2.97784') * (adverts.longitude - '-2.97784') * 53 * 53)), 1) as distance
FROM 
    adverts
WHERE 
    (adverts.type_id = '3')
HAVING 
    DISTANCE < 25
ORDER BY 
    distance ASC 
LIMIT 120,10

Edición: actualizada para incluir el esquema de la tabla, tenga en cuenta que la tabla es más complicada y también lo es la consulta, pero he eliminado las cosas que no son necesarias para este problema.

CREATE TABLE `adverts` (
`advert_id` int(10) NOT NULL AUTO_INCREMENT,
`type_id` tinyint(1) NOT NULL,
`headline` varchar(50) NOT NULL,
`description` text NOT NULL,
`price` int(4) NOT NULL,
`postcode` varchar(7) NOT NULL,
`latitude` float NOT NULL,
`longitude` float NOT NULL,
PRIMARY KEY (`advert_id`),
KEY `latlon` (`latitude`,`longitude`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8

cuando hago una explicación en la declaración de mysql, el número de filas se establece en 67900, que es mucho más que en un radio de 25 millas, y el extra se establece en "Usar dónde; Usar el archivo de archivos".

La consulta tarda 0,3 segundos, lo que es realmente lento, especialmente cuando los sitios web reciben muchas solicitudes por segundo.

Respuestas a la pregunta(2)

Su respuesta a la pregunta