Tak, możesz w tym celu utworzyć zapisaną funkcję. Coś takiego:
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 ;
Nie sądzę, aby zapewniało to jakiekolwiek zwiększenie prędkości, ale jest dobre ze wszystkich innych powodów, o których wspominasz:czytelność, możliwość ponownego użycia, łatwość konserwacji (wyobraź sobie, że znajdujesz błąd po 2 latach i musisz edytować kod w (kilka)set miejsca).