Có, bạn có thể tạo một hàm được lưu trữ cho mục đích này. Một cái gì đó như thế này:
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 ;
Tôi không nghĩ rằng nó mang lại bất kỳ mức tăng tốc độ nào nhưng nó tốt vì tất cả những lý do khác mà bạn đề cập:Tính dễ đọc, khả năng tái sử dụng, dễ bảo trì (hãy tưởng tượng bạn tìm thấy lỗi sau 2 năm và bạn phải chỉnh sửa mã trong một (vài) trăm) địa điểm).