Pregunta

Actualmente tengo un sitio con una tabla que tiene columnas de flotación Lat / largas, y un índice sobre las columnas 2, más otro que necesito para recuperar.

Estoy constantemente consultar esta tabla para obtener las filas que se encuentran dentro de un radio desde un cierto punto (estoy realmente conseguir una plaza para la velocidad), pero necesito solamente los campos que ya están indexados, por lo que este índice se de hecho cubre, y el plan de ejecución tiene sólo 2 pasos:

Index Seek  (cost: 100%) and SELECT (cost: 0%)

Ahora, estoy tratando de tomar ventaja de las características espaciales de SQL 2008. He creado la columna de la Geografía, la llenó, se creó el índice espacial, las obras.

Y todo funciona bien, excepto que el plan de ejecución tiene un millón de pasos, y el 74% del tiempo se dedica a un índice agrupado Seek, donde se une a las filas que se ha encontrado en el índice espacial de la tabla real, a recibiendo el resto de los datos ...
(El índice espacial Seek toma 1% del plan de ejecución de costes)

Así que, al parecer, se está utilizando el índice espacial adecuada y la búsqueda de los registros que necesito mucho más rápido que antes con mi índice "regular" sobre Lat / Long, pero la unión a la tabla principal me está matando, la consulta espacial toma 7 veces más largo que mi viejo.

¿Hay alguna forma de añadir más columnas para el índice espacial de modo que va a estar cubriendo y que puede hacer las cosas en un solo paso, al igual que lo hacía antes?
¿Hay otras cosas que podría hacer para mejorar esta situación?


ACTUALIZACIÓN: He encontrado que los índices "normales" pueden "incluir" otras columnas usando la palabra clave INCLUDE (que yo no sabía nada, lo utilizan para incluir solo las columnas en el propio índice)
De acuerdo con la documentación aquí , esta cláusula no es una opción para los índices espaciales ... ¿Alguna idea?

Gracias!
Daniel

¿Fue útil?

Solución

No, por desgracia, actualmente no hay manera de crear un índice espacial que cubre - la consulta siempre hará la búsqueda de marcador de la tabla base con el fin de obtener el valor de la geografía de la fila.

Para STIntersects, esto es claramente siempre se requiere que todavía tenemos que realizar el filtro secundario en el objeto de la geografía real para verificar que realmente se cruza con el objeto de parámetro. Sin embargo, si usted no requiere respuestas exactas y puede utilizar Filtro (), entonces sería posible proporcionar las columnas de clave principal del índice sin hacer la búsqueda a la tabla base en absoluto. Apoyando esto es algo que estamos considerando para la próxima versión.

En cuanto a la aceleración de su consulta actual, ¿ha intentado utilizar filtro () y el ajuste de su índice con la salida de sp_help_geography_index?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top