我有一個表格(表格2),其中包含一些存儲爲地理數據類型的區域(多邊形)。該表包含1529行。在另一個表格(Table1)中,我有約。 22000行,每行都有一個X/Y,我可以從中創建存儲在地理欄中的點。SQL Server空間查詢優化
我需要做一個空間連接來找出每個點屬於哪個區域。我在兩個表上都創建了空間索引,但我認爲查詢太慢了。現在,它需要約72秒,以使加入的是這樣的:
SELECT ...
FROM [DatabaseA].dbo.Table1 t1
INNER JOIN [DatabaseB].dbo.Table2 t2 ON t1.Geo.STIntersects(t2.Geo) = 1
WHERE t2.ObjectTypeId = 1 AND t2.CompanyId = 3
請注意,這兩個表在不同的數據庫,但在同一臺服務器上。
在創建空間索引之前,查詢速度非常慢,我可以看到正在使用該索引。但是,在table2上創建索引不會影響性能,只有table1上的索引會提供更好的性能。兩個指數具有較高的水平格柵
當我看的執行計劃,我注意到一個篩選一部分花費的時間71%:
CASE WHEN [Expr1015]>(2) THEN CASE WHEN [Expr1016]=[Expr1017] THEN (1) ELSE (0) END ELSE [DatabaseA].[dbo].[Table1].[Geo] as [t].[Geo].STIntersects([DatabaseB].[dbo].[Table2].[Geo] as [g].[Geo]) END=(1)
所以,我的問題是:
若本查詢需要這麼久? 我應該使用其他網格尺寸嗎? 那個過濾器表達式是什麼意思?
有沒有人有提示優化呢?
與許多問題非常相似,請參閱我對此的迴應:http:// stackoverflow。COM /問題/ 7655408/SQL的空間加入/ 7672934#7672934 – CatchingMonkey
SQL Server 2008或2012? – AakashM
@CatchingMonkey:正如我寫的,該指數已被使用,因此增加了一絲不上的表現有所幫助。 – user1632306