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)

空間インデックスなしで 3 倍以上高速に実行されます。

インデックスでは、時間の 65% がレコード テーブルに対するクラスター化インデックス シークであり、29% がフィルターです。全部で65秒。

インデックスがない場合、時間の 92% はフィルターであり、8% はレコード テーブルのクラスター化インデックス スキャンです。合計19秒。

それで、私はここで何が間違っていますか?

4

1 に答える 1

2

また、このMSDNの記事は、特定のクエリに役立つインデックスを作成する方法を理解するのに役立ちました

于 2012-08-31T19:26:06.553 に答える