私は、多くの地理空間データを含むデータベースを持っています...基本的に、何万人もの人々に関する情報であり、それぞれの座標があります。
座標は現在、緯度と経度の 2 つの float として格納されています。関数を使用して、そのレコード内の座標と渡す座標の間の距離を決定します。基本的には、取得した結果を距離で並べ替えて制限します。これは、大まかに関数で使用されるコードです。
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 がジオメトリ データ型をサポートするようになったことに気付きました (データベースを作成したときはサポートしていませんでした)。
私の質問は...ストアド プロシージャの実行速度が大幅に向上し、ジオメトリ データ型を使用するように変更するのにかかる時間を投資する価値があるでしょうか?
ありがとう!
スティーブン