2017-04-12 50 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始终使用空间索引,你需要申请的提示,如果你想使用其他指标