SQL Server 2008 Geometry.STBuffer(...)真的很慢

时间:2011-07-21 13:21:43

标签: sql-server-2008 spatial spatial-query

我有一个基本的SQL查询,看起来像:

SELECT TOP 1
[geom].STBuffer(500)
FROM [db].[dbo].[boundaries]

哪个必要条件从数据库获取地图边界并将其缓冲500米。我遇到的问题是它非常慢,然后服务器内存不足!我确信有些东西一定是错的,因为在GIS程序中这样的简单操作需要几秒钟才能运行,而这种操作在放弃之前大约需要一分钟。

边界相当复杂,但它不应该太复杂,导致服务器耗尽内存,我很确定。

如果我将缓冲距离减少到100米,它会在大约14秒内运行并完成,这仍然太慢而无法实时使用。

知道为什么会这么慢,以及有关如何加快速度的提示吗?

谢谢,

1 个答案:

答案 0 :(得分:2)

这是Sql Server 2008中STBuffer的一个已知限制 - 当distance参数大于对象的直径且对象超过1000个点时,它很容易变慢并且可能会耗尽内存。此问题有一个connect项,并在Sql Server Denali中修复。

作为一种解决方法,您可以尝试在调用缓冲区之前对对象运行Reduce以降低其复杂性,并使用BufferWithTolerance方法传递更高的容差,这将导致更简单的结果。