32 votos

Cuándo NO debe usar un índice espacial?

Yo estoy pidiendo esto porque yo estaba trabajando principalmente con Oracle, pero el año pasado he estado doblando con PostGIS y SQLServer 2008. La mayoría de las funciones espaciales en Oracle no funcionará sin un índice espacial de devolver la ORA-13226 de error:

13226, 00000, "interfaz no compatible sin un índice espacial" //*Causa: La geometría de la tabla no tiene un índice espacial. // *Acción:Compruebe que la geometría de la tabla hace referencia en el espacial el operador tiene un índice espacial.

Para mí esto tiene sentido. Ejecutar una consulta espacial=debe tener un índice espacial. Pero como tengo entendido, ni PostGIS no SQL Servir requieran. PostGIS incluso parece tener funciones (_* por ejemplo, _STContains) que EXPLÍCITAMENTE no utilizar el índice espacial.

Así que la pregunta es - ¿hay casos donde NO se debe utilizar un índice espacial?. No necesariamente si es un "lo tomas o lo dejas' enfoque decir, no va a hacer ninguna diferencia, pero donde NO utilizando el índice espacial va a mejorar el rendimiento? Para mí, la última frase es una contradicción en los términos, pero de lo contrario, ¿por qué PostGIS podría proporcionar estas funciones?

28voto

Swinders Puntos 1042

Si el conjunto de datos se agregan y se actualiza con frecuencia, a continuación, INSERTAR, BORRAR y ACTUALIZAR las declaraciones que hacen que el índice para ser reconstruido puede ralentizar la base de datos de abajo.

Para inserciones masivas, tales como la carga de todo el conjunto de datos de OSM en una base de datos, puede ser más rápido a la caída de los índices y crearlos de nuevo después.

Si es más eficaz para ignorar un índice (por ejemplo, la tabla es lo suficientemente pequeño como para ser cargado en la memoria), de la base de datos del procesador de consultas debe hacer esto de forma automática.

Yo esperaría que la razón principal para permitir las consultas se ejecutan sin un índice espacial es medir los beneficios en el rendimiento que se obtiene utilizando un índice, sin tener que caer.

Por último, si desea mostrar un enorme impulso en el rendimiento de las consultas y mapa muestra puede que desee retrasar la creación de índices en un momento oportuno en el desarrollo del sistema...

14voto

dlanod Puntos 8661

mapoholic,

Hablando en general, no hay una razón para hacer una consulta espacial sin un índice espacial a menos que usted está tratando con muy pequeñas mesas. Aún a pesar de que usted podría utilizar el ST_ que no se utiliza un índice pero no tienen && indexables corto circuito en la caja de los operadores. las funciones que comienzan con _ST no están destinados a ser utilizados por los usuarios finales. La razón por la que existen es porque tienen que hacerlo. PostGIS espacial de los índices de uso de SQL inline para forzar el uso del índice -- el _ST se hace generalmente por GEOS y el && es el índice que puede llegar a ordenar. Así que el _ST son realmente una aplicación artefacto.

así que, en resumen - no es una función, de modo que la operación de índice se pueden reordenar para pasar de una vez antes de que el más intenso espacial de verificación.

11voto

poundifdef Puntos 6005

Creo que este es implícita, pero yo NO uso un índice espacial para una consulta cuando yo tenía un no-índice espacial que podría utilizar en su lugar. Por ejemplo, yo tengo 2,113,450 puntos que abarcan los Estados unidos cargar en una tabla. Si yo quería sacar todos los puntos que estaban en el estado de Alaska, yo podría hacer una consulta espacial que utiliza la ESENCIA de índice en el punto de geometrías para comparar contra de la geometría del estado de Alaska, O, yo podría simplemente utilizar el "state_alpha" campo en el punto de datos (que es también el índice) para devolver todos los puntos que tienen "state_alpha" = 'AK'.

"¿Dónde está el espacial parte de esto", se preguntará usted? Bueno, si tengo que hacer algo más de análisis espacial en la Alaska_points después de recoger ellos, es más rápido para recoger esas geometrías con un no-espacial de la consulta de primera. También significa que para realmente grandes conjuntos de datos, usted se beneficia de la adición de un campo de búsqueda (o tabla). De nuevo, sé que esto es probablemente obvio para todo el mundo), sólo lo menciono porque me encontré con esto en el pasado con conjuntos de datos mundiales que fueron sólo espacialmente indexadas, y donde una consulta frecuente fue "todos los elementos dentro de un país". Hemos ganado un montón de rendimiento mediante la adición de un índice country_fips campo.

A continuación están algunos de los resultados de EXPLICAR ANALIZAR que probar el punto. (NOTA: he probado a hacer la consulta espacial tan eficiente como sea posible mediante el uso de un BBOX consulta. Utilizando el estado de los contornos sólo habría hecho más lento).

# explain analyze select count(*) from gnis_names where state_alpha = 'AK';
Aggregate  (cost=57359.45..57359.46 rows=1 width=0) (actual time=76.606.. 76.607 rows=1 loops=1)
<snip>
Total runtime: 76.676 ms

# explain analyze select count(*) from gnis_names where the_geom && GeomFromText('POLYGON((-179.14734 51.219862,-179.14734 71.3525606439998,179.77847 71.3525606439998,179.77847 51.219862,-179.14734 51.219862))',4326);
Aggregate  (cost=27699.86..27699.87 rows=1 width=0) (actual time=86.523..86.524 rows=1 loops=1)
<snip>
Total runtime: 86.584 ms 

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X