У меня вопрос о радиусе zipcode. Нижеприведенный выбор имеет функцию радиуса, которую я нашел. Это нормально, но немного медленнее. Кроме того, есть ли способ вернуть расстояние до внешнего выбора? Я просто закодировал LONGITUDE и LATITUDE для удобства этого вопроса.MYSQL - радиус Zipcode - оптимальное и обратное расстояние до внешнего выбора
Заранее спасибо. Фил
SELECT
A.MEMBER_ID
FROM MEMBER A,
DETAILS B,
ZIPCODE D
WHERE A.ZIPCODE_CODE IN (Select resultzip.ZIPCODE from
(SELECT
pos.ZIPCODE,
3958 * 2 * ASIN(SQRT(POWER(SIN((39.946438 - abs(pos.LATITUDE)) * pi()/180/2),2) +
COS(39.946438 * pi()/180) * COS(abs(pos.LATITUDE) * pi()/180) * POWER(SIN((-74.915955 - pos.LONGITUDE) *
pi()/180/2), 2))) AS distance_return_this_to_outer_select
FROM ZIPCODE pos
HAVING distance_return_this_to_outer_select < 100
ORDER BY distance_return_this_to_outer_select)
AS resultzip)
AND A.ZIPCODE_CODE = D.ZIPCODE
AND A.MEMBER_ID = B.MEMBER_ID
Limit 0,15;
Одна из идей заключалась бы в том, чтобы найти или создать правильный UDF, но если компиляция кода не ваша вещь (это определенно не моя), тогда вы можете построить sproc. Это будет не намного быстрее, но это будет намного более элегантно. Затем взгляните на EXPLAIN для этого запроса, чтобы узнать, какие индексы будут наиболее эффективными. – Strawberry
Кроме того, я подозреваю, что запрос MySQL умножить константы на 2 или разделить их на 180 немного меньше эффективности, чем просто сказать, что это значения – Strawberry
Спасибо для вашего комментария. Я посмотрю на UDF – philipfwilson