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?
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