1

我有一个基本的 SQL 查询,如下所示:

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

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

边界相当复杂,但它不应该复杂到导致服务器内存不足,我确信这一点。

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

关于为什么它可能会这么慢的任何想法,以及关于如何加快速度的任何提示?

谢谢,

4

1 回答 1

3

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

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

于 2011-07-22T14:21:32.210 回答