【发布时间】:2013-07-11 20:23:37
【问题描述】:
我有一个简单的表格,其中包含代表 X 和 Y 坐标的 2 个浮点列。非聚集索引位于这 2 列中的每一列上。在这张表中,我想使用这样的 SQL 将大约 500 万个数据点分组到自定义网格中:
SELECT COUNT(X) Count, AVG(X) CenterX, AVG(Y) CenterY
FROM DataPoints
GROUP BY FLOOR(X / 5), FLOOR(Y / 5)
在一个测试用例中,我将一个包含 815000 个点的数据集拆分为一个网格,每个点都有自己的网格单元。 SQL Server 2012 26000 毫秒 提供的结果显然太长了。我在一个简单的点数组上使用 LINQ 进行了相同分组的 C# 实现,并且只用了 3450ms!我还创建了一个 SQL 存储过程以加快速度,但计算网格单元仍需要 26-30 秒。
我不明白为什么 SQL Server 需要这么长时间来计算这些组。我知道在所有 815000 个点上计算网格单元索引可能需要很长时间,但比简单的 C# 程序长 7 倍不可能是一个现实的结果。
我也尝试使用空间类型来计算网格,但这些解决方案甚至更慢。使用几何列和空间索引 (GEOMETRY_AUTO_GRID) 内置 sp_help_spatial_geometry_histogram 需要 2:40 分钟来计算包含数据的 4 个网格单元。
有人知道如何加速这样一个简单的 SQL 吗?将来,这些数据将被发送到浏览器中的地图,并且会有很多请求,因此
【问题讨论】:
标签: sql sql-server sql-server-2012