1

我正在测试是否可以在 SQL Server 2012 上使用空间索引。

所以,我有一张桌子

CREATE TABLE [dbo].[Records]
(
 [ID] [uniqueidentifier] PRIMARY KEY NOT NULL,
 [Value] [nvarchar](256) NOT NULL,
 [Padding] [nvarchar](max) NOT NULL,
 [Bounds] [geometry] NOT NULL
)

和一个索引

CREATE SPATIAL INDEX [RecordsSpatialIndex]
ON [Records]([Bounds])
USING GEOMETRY_GRID
WITH
(
    BOUNDING_BOX = (0, 0, 2000, 2000) -- all coordinates are within this range
);

[Bounds] 列包含 5 点多边形,实际上是矩形 (x1 y1, x1 y2, x2 y2, x2 y1, x1 y1)。

@bounds 变量包含相同类型的矩形。奇怪的是下面的查询

SELECT
    [ID], [Value], [Padding]
FROM
    [Records]
WHERE
    ([Bounds].STContains(@Bounds) = 1)

在没有空间索引的情况下运行速度提高了三倍以上。

对于索引,65% 的时间是 Clustered Index Seek over Records 表,29% 是 Filter。总共65秒。

如果没有索引,92% 的时间是过滤器,8% 的时间是聚集索引扫描记录表。总共19秒。

那么,我在这里做错了什么?

4

1 回答 1

2

此外,这篇 MSDN文章对我了解如何创建对特定查询有用的索引很有帮助

于 2012-08-31T19:26:06.553 回答