1

SQL Serverデータベースに多数の写真(約1,000万枚)があり、地理座標列はNULLまたはNOT NULL(マップに配置または配置されていない)にすることができます。

また、この地理情報に空間インデックスを作成しました。

現在、特定のポリゴン内のすべての写真を選択しようとしています。

地図上にない写真を保存する方法は2つあります。

  • マップ上にないすべての写真の地理的位置にNULLを割り当てると、そのようなクエリのパフォーマンスが遅すぎます(私が理解していないように、空間インデックスはNULL列ではまったく機能しません)。

  • POINT(0 0)地図上にないすべての写真の地理的位置に割り当てると、このゼロ点の場合を除いて、パフォーマンスは良好POINT(0 0)です。また、そのようなリクエストは間違った写真を返します(それらは地図上に存在しません)。

どうすればこれらの問題を克服できますか?

NULLまたはNOTNULLのビットを含む列を追加し、2つの列(この列と地理情報)からインデックスを作成する必要がありますか?

UPDATE 2つの列からインデックスを作成しようとしましたが、空間インデックスには地理情報を含む1つの列しか含まれていないため、不可能です(MSDN)。

4

2 に答える 2

3

使用している SQL サーバーのバージョンは何ですか? 2008 および 2008 R2 の null 許容空間列には既知の問題があります。この同じトピックに関する私の質問を見てください: SQL Server 2008 Performance on nullable geography column with spatial index

空間データ型を格納する別のテーブルを用意することで、この問題を解決しました。私のプロジェクトでは、Id 列、緯度と経度の列を持つ Address テーブルがあります。次に、Address の Id と Geography 列に外部キー制約を持つ AddressCoordinate テーブルがあります。最後に、欠落している有効な AddressCoordinates をほぼ定期的に入力するスクリプトがあります。

于 2013-02-22T09:47:44.637 に答える
0

私が理解しているように、私の問題には2つの解決策があります。

  • 原点POINT(0 0)を極北に移動POINT(0 90)。このソリューションは理想的ではありませんが、機能しており、SQL Server のバージョンを変更する必要はありません。
  • 次のスクリプトを実行して、SQL Server のバージョンを 110 に変更します (このバージョンでは NULL のバグが修正されています): ALTER DATABASE database_name SET COMPATIBILITY_LEVEL = 110
于 2013-02-28T10:02:47.587 に答える