Ano, pro tento účel můžete vytvořit uloženou funkci. Něco takového:
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 ;
Nemyslím si, že nabízí žádné zvýšení rychlosti, ale je to dobré pro všechny ostatní důvody, které uvádíte:Čitelnost, opětovná použitelnost, snadná údržba (představte si, že po 2 letech najdete chybu a musíte upravit kód za (pár) stovek místa).