J'ai une colonne de type géographie. J'ai créé aa index spatial, mais ce ne sont pas utilisés:L'index spatial SQL Server 2008 n'est pas utilisé
declare @geog geography
select @geog = 'POINT (18.12 -33.2)'
select *
from dbo.product WITH(INDEX(IX_Spatial))
where
@geog.STDistance(GeoLocation) > 1000
L'indice est créé comme ceci:
CREATE SPATIAL INDEX [IX_Spatial] ON [dbo].[Product]
(
[GeoLocation]
)USING GEOGRAPHY_GRID
WITH (
GRIDS =(LEVEL_1 = MEDIUM,LEVEL_2 = MEDIUM,LEVEL_3 = MEDIUM,LEVEL_4 = MEDIUM),
CELLS_PER_OBJECT = 1024,
PAD_INDEX = OFF, SORT_IN_TEMPDB = OFF,
DROP_EXISTING = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
Les valeurs de densité du réseau aux différents niveaux sont pour ne pas délibérément à moyen . Cela ne fait aucune différence ce que je les ai mis, Si je vois le plan d'exécution estimé, l'index n'est pas utilisé.
[http://blogs.msdn.com/b/isaac/archive/2008/08/29/is-my-spatial-index-being-used.aspx][1]
Si je essayez d'ajouter une touche à l'optimiseur de requêtes
declare @geog geography
select @geog = 'POINT (18.12 -33.2)'
select *
from dbo.product WITH(INDEX(IX_Spatial))
where
@geog.STDistance(GeoLocation) > 1000
Je reçois cette erreur:
The query processor could not produce a query plan for a query with a spatial index hint. Reason: Spatial indexes do not support the comparator supplied in the predicate
Ma base de données est en cours d'exécution à SQL Server 2008 (100) de niveau de compatibilité.
.
Ce qui explique pourquoi l'utilisation de moins utilise l'index. Merci –