我正在测试我是否可以在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秒。
那么,我在这里做错了什么?