Я пытаюсь сделать SQL-запрос к базе данных из 7 миллионов записей, в базе данных "geonames" индексированы значения "широта" и "долгота" в десятичной системе счисления (10.7), проблема в том, что запрос слишкомslow:
SELECT SQL_NO_CACHE DISTINCT
geonameid,
name,
(6367.41 * SQRT(2 * (1-Cos(RADIANS(latitude)) * Cos(0.704231626533) * (Sin(RADIANS(longitude))*Sin(-0.0669560660943) + Cos(RADIANS(longitude)) * Cos(-0.0669560660943)) - Sin(RADIANS(latitude)) * Sin(0.704231626533)))) AS Distance
FROM geoNames
WHERE (6367.41 * SQRT(2 * (1 - Cos(RADIANS(latitude)) * Cos(0.704231626533) * (Sin(RADIANS(longitude)) * Sin(-0.0669560660943) + cos(RADIANS(longitude)) * Cos(-0.0669560660943)) - Sin(RADIANS(latitude)) * Sin(0.704231626533))) <= '10')
ORDER BY Distance
Проблема сортируется по полю «Расстояние», которое при динамическом создании занимает много времени, чтобы просочиться в условие «ГДЕ», если я уберу условие «ГДЕ ... <= 10 "занимает всего 0,34 секунды, но в результате получается 7 миллионов записей, а передача данных из MySQL в PHP занимает почти 120 секунд. </p>
Можете ли вы придумать какой-нибудь способ сделать запрос, чтобы не потерять производительность, ограничиваяПоле расстояния, учитывая, что запрос будет очень часто менять значения?