StContains関数を使用して2つの地理的な列を比較したいが、クエリの速度が遅くなり、30-40秒後に出力が得られる。私は、クエリの下に使用していますSTContainsを使用して地理的な列を比較すると、SQL Serverのクエリが遅くなる
:
SELECT DISTINCT
T.[LocationID], G.[Boundary].STContains(ESP.GeographyValue)
FROM [#TempTable] T
CROSS JOIN [dbo].[GeographyTable] G
INNER JOIN [dbo].LocationTable ESP ON T.LocationID = ESP.LocationID
WHERE G.[ID] = 1
ここ境界との両方をGeographyValueは地理データ型です。
G. [境界] .STコンテナ(ESP.GeographyValue)を削除した場合、クエリは0秒後に実行されるため、パフォーマンスの主な問題はStContainsによるものです。
結果セットには、7000レコードが含まれている可能性があります。
更新:
私は列の両方に空間インデックスを追加したが、まだ実行が遅いです。私もSTContainsを試してみました
select ES.* from LocationTable ES INNER JOIN GeographyTable G ON ES.GeographyValue.STEquals(G.Boundary) = 1 Where G.Id = 1
まだ運:単純なクエリを実行することにより、10クエリの下に使用secs.Iをとります。
あなたが7000点の異なる場所を比較する必要があり、このクエリの目的は何であるの見直し?空間比較は複雑でリソース集中的なので、しばらく時間がかかりますが、7000件を実行しています。 Geographyの列に空間インデックスがありますか? – iamdave
私は、ユーザーがその中から1つを選択できるUI上の地理のリストを持っており、GeographyTableと一致する場所を比較したいと思います。 LocationTableは別のデータベースに存在するので、GeographyTable IDカラムを追加することはできません。空間インデックスは両方のテーブルに存在しません。どのテーブルに追加する必要がありますか? –
空間的なインデックスが空間的な列に表示されます...ユーザーがUIを使用して* 1つの地理を選択している場合、なぜ7000をすべて比較していますか?彼らが選んだものと比較するだけです。 – iamdave