問題タブ [sqlgeography]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sql-server-2008-r2 - クエリを遅くする空間インデックス
バックグラウンド
顧客の地域を表す POLYGONS/MULTIPOLYGONS を含むテーブルがあります。
- テーブルには約 8,000 行が含まれています
- ポリゴンの約 90% が円
- ポリゴンの残りの部分は、1 つ以上の州、県、またはその他の地理的地域を表します。これらのシェイプの生のポリゴン データは、米国の国勢調査データからインポートされました。
- テーブルには、主キーに空間インデックスとクラスター化インデックスがあります。デフォルトの SQL Server 2008 R2 設定は変更されていません。オブジェクトごとに 16 セル、すべてのレベルが中。
私が経験している問題を再現する簡単なクエリを次に示します。
単純で単純なクエリのように見えても、実行に 12 ~ 13 秒かかり、そのような単純なクエリに対して非常に複雑な実行計画のように見えます。
私の調査では、クエリ オプティマイザーが空間インデックスを適切に使用するように、クエリにインデックス ヒントを追加することをいくつかの情報源が提案しています。追加WITH(INDEX(idx_terr_territory))
しても効果はなく、実行計画から、ヒントに関係なくインデックスを参照していることは明らかです。
ポリゴンの削減
米国国勢調査データからインポートされた地域ポリゴンが不必要に複雑である可能性があるように思われたため、2 番目の列を作成し、さまざまな許容度で縮小ポリゴン ( Reduce() メソッドを使用) をテストしました。新しい列に対して上記と同じクエリを実行すると、次の結果が得られました。
- 削減なし: 12649ms
- 10 減: 7194ms
- 20 減: 6077ms
- 30 減: 4793ms
- 40 減: 4397ms
- 50 減: 4290ms
明らかに正しい方向に向かっていますが、精度を落とすことは洗練されていない解決策のように思えます。これは、インデックスが想定されているものではありませんか? そして、そのような基本的なクエリの実行計画は、依然として奇妙に複雑に見えます。
空間インデックス
好奇心から、空間インデックスを削除したところ、結果に驚かされました。
- クエリは、インデックスなしで高速になりました (削減なしで 3 秒未満、削減許容値 >= 30 で 1 秒未満)
- 実行計画ははるかに単純に見えました。
私の質問
- 空間インデックスによって速度が低下するのはなぜですか?
- クエリを高速化するために、ポリゴンの複雑さを軽減することは本当に必要ですか? 精度を落とすと、将来的に問題が発生する可能性があり、うまくスケーリングできないようです。
その他の注意事項
- SQL Server 2008 R2 Service Pack 1 が適用されました
- さらなる調査により、ストアド プロシージャ内でクエリを実行することが提案されました。これを試してみましたが、何も変わらないように見えました。
sql - Geography タイプを XML として返す SQL クエリ
Geography 型を保持するテーブルから XML を返そうとしています。
SQL クエリ:
次のエラーが表示されます。
この Geography 列を読み取り可能なものにキャストするにはどうすればよいですか?
ありがとう。
sql - 2つのテーブルからXMLに選択
次のSQLを実行しようとしています。
これは問題なく機能しますが、結果をXML形式で取得したいので、geography列をキャストする必要があったため、最初の行を次のように変更しました。
そして最後にこの行を追加しました:
今、私はXMLを取得していますが、Table2からのデータのみを使用しています。
どんなアドバイスでも大歓迎です。
sql - GROUP BY 句の SQL Geography データ型列
私は SQL Server を使用しており、データベースからワーカーの地理的な場所を取得するスクリプトを作成しています。スクリプトは以下です。
GROUP BY w.display_name, w.geo_location
問題は、重複したレコードが表示されているため、スクリプトに追加したいということです。データ型が geography の列を group by 句に追加すると、エラーがスローされます。
これを追加するとスローされるエラーは次のとおりです。
タイプ「地理」は比較できません。GROUP BY 句では使用できません。
これを回避する方法はありますか?地理データ型で必要なため、にw.geo_location
変換できません。VARCHAR
sql - 地理列から近くのポイントを検索
空間インデックスを使用して、テーブルに geography 型の列があります。インデックスを使用してパフォーマンスを向上させながら、特定の緯度/経度の X メートル以内にある上位 N 行を選択するにはどうすればよいですか?
entity-framework - 最初に Entity Framework コードを使用して SqlGeography をマッピングする
私はEntity Framework 4とsqlgeography
データ型をいじっています。Entity Framework で sqlgeography 型をデータベースにマップするのに問題があります。私は自分のクラスを POCO として定義しており、エンティティ フレームワークにテーブルを作成してもらいたいと考えています。私はこれに成功しなかったので、自分でテーブルを作成しようとしましたが、どちらも成功しませんでした。
私のクラスは次のようになります。
これは私が得るエラーです:
sql-server-2008 - GMLからSQLGeography-24200:指定された入力は有効なgeographyインスタンスを表していません
私は現在、Googleマップをアプリケーションの1つに統合する過程にあります。要件の1つは、ユーザー定義領域をデータベースに保管することです。これを行うために、SQL Server 2008でGeographyタイプを使用しています。ほとんどの部分で機能している間に、ブロッキングの問題が発生しました。
以下にいくつかのサンプルコードがあります。GeographyオブジェクトにGMLXML文字列を入力していますが、一部のインスタンスは機能し、一部は機能せず、機能しない論理的な理由がわかりません。
動作しているポリゴンは(いくつかの国のサイズにまたがる)巨大な領域を定義しますが、機能していないポリゴンは大きな町のサイズについて定義しません。失敗しているのは、これらの「より小さな」領域だけです。迷惑なことに、この小さいものは、私が必要とするものに対して十分に小さくなりません。なぜこれが起こっているのか誰か教えてもらえますか?
sql - SQL Server - 経度と緯度からジオメトリ データ型へ
SQL Server 2008 データベースを使用するアプリケーションに取り組んでいます。このデータベースには、ユーザーの場所を示す経度と緯度の 2 つのフィールドを持つ Session という名前のテーブルがあります。Zone という別のテーブルには、ジオメトリ タイプのエリア属性があります。ユーザーの経度と緯度の座標が特定のジオメトリに属しているかどうかを確認するにはどうすればよいですか?
ありがとうございました
sql-server-2008 - 地理列から位置を取得する
緯度、経度などの地理情報を含むテーブルを、地理列を使用するテーブルに移行しています (SQL サーバー 2008)。
これらの値を返すストアド プロシージャを更新する必要があります。
私がすることができます:
ただし、変更したくないSPの署名には、次のものが必要です。
フロートとして正しい値を取得するにはどうすればよいですか?
http://sqltutorials.blogspot.com.au/2007/09/sql-function-split.htmlなどを使用できますが、これはそれほど複雑ではないはずです。
ありがとうメラニー
c# - 中心と半径から SqlGeography 多角形円を作成する
C# を使用して、SQL Server 2008 地理フィールドに円を保存したいと思います。
c# には緯度、経度、半径がありますが、円を表す多角形を計算し、SqlGeography
そこから を作成する方法が見つかりません。
ポリゴンを作成するために次の関数を試しました:
そして、これList<Coordinate>
を解析可能な文字列に変換してみてください:
しかし、ポリゴンが単一の半球上にある必要があると常に不平を言っています。
私はまったく正しい軌道に乗っていますか?これを行う他の(より簡単な)方法はありますか?