SQL Server 2008のgeographyデータ型を使用する理由
私は顧客データベースを再設計しています。標準の住所フィールド(Street、Cityなど)とともに保存したい新しい情報の1つは、住所の地理的な場所です。私が考えている唯一の使用例は、住所が見つからない場合にユーザーがGoogleマップに座標をマッピングできるようにすることです。これは、エリアが新しく開発された場合や、遠隔地や農村部にある場合によく発生します。 私の最初の傾向は、緯度と経度を10進値として格納することでしたが、SQL Server 2008 R2にはgeographyデータ型があることを思い出しました。私はを使用した経験がまったくありませんgeography。また、私の最初の調査から、それは私のシナリオにとってはやり過ぎのようです。 たとえば、緯度と経度をとして保存して作業decimal(7,4)するには、次のようにします。 insert into Geotest(Latitude, Longitude) values (47.6475, -122.1393) select Latitude, Longitude from Geotest しかしgeography、私はこれを行います: insert into Geotest(Geolocation) values (geography::Point(47.6475, -122.1393, 4326)) select Geolocation.Lat, Geolocation.Long from Geotest そうではありませんが、その私は持っていない場合は、はるか、なぜ追加の複雑さを複雑? の使用をやめる前に、geography考慮すべきことはありますか?緯度インデックスと経度フィールドのインデックスを作成するよりも、空間インデックスを使用して場所を検索する方が高速でしょうか?私がgeography知らないことを使用する利点はありますか?または、反対に、私が使用を思いとどまらせるものについて知っておくべき警告がありgeographyますか? 更新 @Erik Philipsは、近接検索を行う機能をもたらしました geography、で。これは非常に優れています。 一方、簡単なテストではselect、緯度と経度を取得するための単純な方法では、使用時に大幅に遅くなることが示されていgeographyます(詳細は以下)。、および別のSOの質問に対する受け入れられた回答に関するコメントには、geography私は不機嫌です: @SaphuAどういたしまして。余談ですが、null許容のGEOGRAPHYデータ型列で空間インデックスを使用するときは十分注意してください。深刻なパフォーマンスの問題があるため、スキーマを再構築する必要がある場合でも、GEOGRAPHY列をnullにできないようにしてください。–トーマス6月18日11:18 全体として、近接検索を実行する可能性と、パフォーマンスと複雑さのトレードオフを比較検討してgeography、この場合はの使用を省略することにしました。 私が実行したテストの詳細: 私は2つのテーブルを作成しました。1つは緯度と経度geographyを使用し、もう1つはを使用していdecimal(9,6)ます。 CREATE TABLE [dbo].[GeographyTest] ( [RowId] [int] IDENTITY(1,1) NOT …