空间索引使用STContains减慢查询速度

时间:2012-07-07 15:52:35

标签: sql-server tsql sql-server-2012 spatial-index spatial-query

我正在测试我是否可以在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%是Clustered Index Scan over Records表。总共19秒。

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

1 个答案:

答案 0 :(得分:2)

此MSDN article对我有助于了解如何创建对特定查询有用的索引