我有一个包含大量地理空间数据的数据库......基本上是关于成千上万人的信息,每个人都有坐标。
坐标当前存储为纬度和经度的两个浮点数,我使用一个函数来确定该记录中的坐标与我传入的坐标之间的距离......基本上是为了对我得到的结果进行排序和限制距离。这大致是函数中使用的代码。
DECLARE @earthSphereRadiusKilometers as float
DECLARE @kilometerConversionToMilesFactor as float
SELECT @earthSphereRadiusKilometers = 6366.707019
SELECT @kilometerConversionToMilesFactor = .621371
-- convert degrees to radians
DECLARE @lat1Radians float
DECLARE @lon1Radians float
DECLARE @lat2Radians float
DECLARE @lon2Radians float
SELECT @lat1Radians = (@lat1Degrees / 180) * PI()
SELECT @lon1Radians = (@lon1Degrees / 180) * PI()
SELECT @lat2Radians = (@lat2Degrees / 180) * PI()
SELECT @lon2Radians = (@lon2Degrees / 180) * PI()
-- formula for distance from [lat1,lon1] to [lat2,lon2]
RETURN ROUND(2 * ASIN(SQRT(POWER(SIN((@lat1Radians - @lat2Radians) / 2) ,2) + COS(@lat1Radians) * COS(@lat2Radians) * POWER(SIN((@lon1Radians - @lon2Radians) / 2), 2))) * (@earthSphereRadiusKilometers * @kilometerConversionToMilesFactor), 4)
存储过程需要 4 或 5 秒才能运行。
我注意到 SQL Azure 现在支持几何数据类型 ..(我创建数据库时不支持)。
所以我的问题是......我的存储过程运行速度是否会显着提高,这是否值得我花时间将其更改为使用几何数据类型?
谢谢!
史蒂文