2017-04-12 47 views
0

我有一個有趣的問題。我有一個由GeoServer在非規格化表上生成的select語句。查詢的結構是這樣的SqlServer空間索引/過濾

從表
其中[一堆AND和OR條件]
AND
「the_geom」 中選擇 「the_geom」 .STAsBinary()爲 「the_geom」
。過濾器(幾何:: STGeomFromText( '')= 1;

這個問題需要約6分鐘,如果我跳過空間條件,問題需要1秒左右的數據庫是40GB左右時,SQL Server 2014,。 26GB的內存,我有一個空間索引和其他索引對於非空間部分。空間索引網格大小約爲600.

所以我的問題是,如果有什麼辦法可以讓這個問題更快?我可以在SQL Server中做的任何推特?

+0

你確定這是會被髮送查詢? 'STGeomFromText()'看起來像兩個參數。地理位置服務器真的會向該呼叫發送空字符串嗎?您可能想要控制索引中的值來控制每個對象的網格層次和單元格。你可以發佈空間索引的DDL嗎? –

+0

DDL:CREATE SPATIAL INDEX [idx_name] ON [DBO] [tabler] ( \t [GEOM] )使用GEOMETRY_GRID WITH(BOUNDING_BOX =(380656,6836190,905384,7533950),網格=(LEVEL_1 = MEDIUM,。 LEVEL_2 = MEDIUM,LEVEL_3 = MEDIUM,LEVEL_4 = MEDIUM), CELLS_PER_OBJECT = 900,PAD_INDEX = OFF,STATISTICS_NORECOMPUTE = OFF,SORT_IN_TEMPDB = OFF,DROP_EXISTING = OFF,ONLINE = OFF,ALLOW_ROW_LOCKS = ON,ALLOW_PAGE_LOCKS = ON)ON [PRIMARY] GO Jason你說的對,STGeomFromText有兩個參數,我留下的EPSG代碼是3006. 主要問題是網格太大。我將彙集一些指標 – Perfa

+1

如果你指的是邊界框,也許它太大了 - 但我通常調整的項目是你所顯示的「GRID ='部分中的不同層次以及每個對象的單元格正如我之前提到的。特別是,每個對象的單元格對於我通常看到的工作負載看起來很高。這兩個鏈接提供了一個相當簡潔的解釋,說明他們控制的內容以及人們可能期望的結果,這些值會導致時間/空間的折衷。 https://www.simple-talk.com/sql/t-sql-programming/sql-server-spatial-indexes/和http://boomphisto.blogspot.com/2011/04/black-art-of-spatial -index-tuning-in.html –

回答

1

問題是空間索引不包含任何列或由另一列查找。因此,如果您的條件the_geom".Filter(geometry::STGeomFromText('') = 1返回許多行perfomance可能會很糟糕。

在我的實踐的SQL Server始終使用空間索引,你需要申請的提示,如果你想使用其他指標