Да, можете да създадете съхранена функция за тази цел. Нещо подобно:
DELIMITER //
DROP FUNCTION IF EXISTS Haversine //
CREATE FUNCTION Haversine
( myLat FLOAT
, myLong FLOAT
, db_lat FLOAT
, db_long FLOAT
, unit VARCHAR(20)
)
RETURNS FLOAT
DETERMINISTIC
BEGIN
DECLARE haver FLOAT ;
IF unit = 'MILES' --- calculations
SET haver = ... --- calculations
RETURN haver ;
END //
DELIMITER ;
Не мисля, че предлага някакво увеличение на скоростта, но е добро поради всички останали причини, които споменахте:четливост, многократна употреба, лекота на поддръжка (представете си, че откриете грешка след 2 години и трябва да редактирате кода след (няколко) стотици места).