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)
空間インデックスなしで 3 倍以上高速に実行されます。
インデックスでは、時間の 65% がレコード テーブルに対するクラスター化インデックス シークであり、29% がフィルターです。全部で65秒。
インデックスがない場合、時間の 92% はフィルターであり、8% はレコード テーブルのクラスター化インデックス スキャンです。合計19秒。
それで、私はここで何が間違っていますか?