1

我測試,如果我可以在SQL Server 2012空間索引減慢與STContains

所以在使用空間索引的查詢,我有一個表

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%的時間是聚集索引查找記錄表和29%是過濾器。共65秒。

沒有索引92%的時間是過濾器,8%是聚集索引掃描記錄表。共19秒。

那麼,我在這裏做錯了什麼?

+0

退房查詢計劃指標。有時候查詢優化器不是最優的。但它收集統計數據並變得更聰明。 – Paparazzi 2012-07-07 20:10:53

回答

2

而且這個MSDN article是對我很有幫助,在瞭解如何創建有用的特定查詢