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