我有一個大型查詢,試圖將質心與它們內部適合的多邊形進行匹配。雖然我通過塊和多邊形的Z值進行約束,但它仍然會執行點中多邊計算,並且需要運行一段時間才能運行。空間索引不提供任何好處
對於一些背景:
- 包含質心的表在錶行2.5M
- 所有空間數據是在世界上相當多的小區域,對邊界框整個事情是隻有7643 X2351米
- 那些行,660K適合比賽在Z性判據
- 包含多邊形表有10K行
- 所有的表空間的數據是在EV連接世界
- 這些行的小面積,2366人姓名相符的標準
- 沒有任何索引運行查詢時間爲11小時,返回91K匹配
查詢是這樣的:
select blocks.Id, blocks.WGS84Centroid, polygons.Shape
from
blocks inner join polygons
on
blocks.ZCentre >= (polygons.ZCentre - (polygons.ZLength/2)) and blocks.ZCentre <= (polygons.ZCentre + (polygons.ZLength/2)) and
polygons.Shape.STIntersects(blocks.WGS84Centroid) = 1
inner join name
on
polygons.nameId = name.ID
where name.Name = 'blah'
因此,爲了加快此查詢,我在blocks.WGS84Centroid
上添加了空間索引,並在polygons.Shape
上添加了一個空間索引。
查詢分析器還建議blocks.ZCentre上包含blocks.Id和blocks.WGS84Centroid的非聚簇索引。
畢竟是,這裏的查詢計劃:
和過濾成本:
然而,增加的3個指標後,查詢仍然需要同樣長的運行。
我現在可以做什麼?
你更新統計數據? –
@DavidBrabant:索引是新創建的;我懷疑這會有所幫助。 – Coxy
實際上,當我使用WITH(INDEX(CentroidSpatialIndex))嘗試提示查詢分析器時,我可以看到聚集索引seek在其上有一個/!\圖標。我試圖運行CREATE STATISTICS,但是我得到錯誤表'dbo.blocks'中的列'WGS84Centroid'是一種無效的索引或統計中的鍵列。 – Coxy