1

Je teste si je peux utiliser des indices spatiaux sur SQL Server 2012.Index Spatial ralentit requête avec STContains

Donc, j'ai une table

CREATE TABLE [dbo].[Records] 
(
[ID] [uniqueidentifier] PRIMARY KEY NOT NULL, 
[Value] [nvarchar](256) NOT NULL, 
[Padding] [nvarchar](max) NOT NULL, 
[Bounds] [geometry] NOT NULL 
) 

et un indice

CREATE SPATIAL INDEX [RecordsSpatialIndex] 
ON [Records]([Bounds]) 
USING GEOMETRY_GRID 
WITH 
(
    BOUNDING_BOX = (0, 0, 2000, 2000) -- all coordinates are within this range 
); 

La colonne [Bounds] contient des polygones à 5 points, en fait des rectangles (x1 y1, x1 y2, x2 y2, x2 y1, x1 y1).

La variable @bounds contient le même type de rectangle. Chose étrange est que la requête suivante

SELECT 
    [ID], [Value], [Padding] 
FROM 
    [Records] 
WHERE 
    ([Bounds].STContains(@Bounds) = 1) 

s'exécute plus de trois fois plus vite sans l'indice spatial.

Avec l'index 65% du temps est Index clusterisé Recherche sur la table Records et 29% est Filter. Totalement 65 secondes.

Sans l'index, 92% du temps est filtré et 8% est index clusterisé. Totalement 19 secondes.

Alors, qu'est-ce que je fais mal ici?

+0

Vérifier le plan de requête. Il y a des moments où l'optimiseur de requête n'est pas optimal. Mais il recueille des statistiques et devient plus intelligent. – Paparazzi

Répondre

2

ce MSDN article a également été utile pour moi de comprendre comment créer des index qui sont utiles pour les requêtes particulières